• LeetCode173. 二叉搜索树迭代器


    要实现二叉搜索树的迭代器,判断当前元素是否有下一个元素和知道下一个元素是多少?
    好办,二叉搜索树的中序遍历序列不是升序的嘛,那我们就可以对二叉搜索树中序遍历一遍记录到一个全局变量数组里面,然后要判断是否有下一个元素和下一个元素是多少就很简单了。

    代码如下:

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class BSTIterator {
    public:
        vector<int> nodes;            //中序遍历,把每一个节点的值记录在nodes数组里
        int cur;                      //当前遍历到的是元素在nodes数组中的下标
        int size;                     //二叉搜索数的节点个数
    
        void inOrderTraversal(TreeNode* root) {            //中序遍历二叉搜索数,把节点的值记录在nodes数组中
            if(root == NULL) {
                return;
            }
            inOrderTraversal(root -> left);
            nodes.push_back(root -> val);
            inOrderTraversal(root -> right);
        }
    
        BSTIterator(TreeNode* root) {            //构造函数里进行中序遍历,初始化cur和size
            inOrderTraversal(root);          
            cur = 0;
            size = nodes.size();
        }
        
        /** @return the next smallest number */
        int next() {
            return nodes[cur++];                  //二叉搜索数中的下一个节点值就是nodes中下一个位置的元素,要更新cur访问下一个位置
        }
        
        /** @return whether we have a next smallest number */
        bool hasNext() {
            return cur + 1 <= size;              //只要cur不是size - 1(nodes数组的最后一个元素),那么他就有next
        }
    };
    
    /**
     * 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();
     */
    
  • 相关阅读:
    算法导论2.37答案
    算法导论2.37的算法
    heavy dark读《《暗时间》》
    深入SetOP2函数
    c++标准库都有哪些文件
    c++ sort函数的用法
    深入char转换为int/unsigned int的内部机制分析
    顺序容器之vector
    java的动态代理机制详解
    java.lang.IllegalStateException: Web app root system property already set to different value
  • 原文地址:https://www.cnblogs.com/linrj/p/13422988.html
Copyright © 2020-2023  润新知