0
点赞
收藏
分享

微信扫一扫

【LeetCode173】二叉搜索树迭代器(中序遍历)

林肯公园_97cc 2022-02-22 阅读 41

一、题目

在这里插入图片描述
在这里插入图片描述

二、思路

  • 题目要求BST二叉搜索树的中序遍历迭代器,所以只需要对BST先进行中序遍历,得到这个中序遍历数组,然后对该数组进行next操作和havenext操作即可。
  • 在实现过程中,注意引用、构造函数的初始化列表等细节。

三、代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class BSTIterator {
private:
    //得到中序遍历数组res
    void inorder(TreeNode* root, vector<int>& res){
        if(!root) return;
        inorder(root->left, res);
        res.push_back(root->val);
        inorder(root->right, res);
    }
    vector<int> inorderTraversal(TreeNode* root){
        vector<int>ans;
        inorder(root, ans);
        return ans;
    }
    vector<int>arr;
    int idx;
public:
    //初始化列表
    BSTIterator(TreeNode* root): idx(0), arr(inorderTraversal(root)){}
    
    int next() {
        return arr[idx++];
    }
    
    bool hasNext() {
        return (idx < arr.size());
    }
};

/**
 * Your BSTIterator object will be instantiated and called as such:
 * BSTIterator* obj = new BSTIterator(root);
 * int param_1 = obj->next();
 * bool param_2 = obj->hasNext();
 */
举报

相关推荐

0 条评论