美文网首页领扣(leetcode)
173. 二叉搜索树迭代器

173. 二叉搜索树迭代器

作者: 莫小鹏 | 来源:发表于2018-10-01 20:29 被阅读0次

    题目描述

    实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。

    调用 next() 将返回二叉搜索树中的下一个最小的数。

    注意: next() 和hasNext() 操作的时间复杂度是O(1),并使用 O(h) 内存,其中 h 是树的高度。

    分析

    使用栈来缓存数据, 模拟中序遍历的方式,栈顶为迭代器的next节点,栈非空表示还有元素。
    左节点为空的节点压栈
    每一个节点出栈时,需要把右子树的左节点为空的节点压栈

    代码

    /**
     * Definition for binary tree
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class BSTIterator {
    public:
        BSTIterator(TreeNode *root) {
            if(root == NULL) {
                return;
            }
            pushAll(root);
        }
        
        void pushAll(TreeNode *p) {
            for(;p != nullptr; p = p->left) {
                m_s.push(p);
            }
            
        }
    
        /** @return whether we have a next smallest number */
        bool hasNext() {
            return !m_s.empty();
        }
    
        /** @return the next smallest number */
        int next() {
            if(!hasNext()){
                return -1;
            }
            auto t = m_s.top();
            m_s.pop();
            pushAll(t->right);
            return t->val;
        }
    private:
        stack<TreeNode*> m_s;
    };
    

    题目链接

    https://leetcode-cn.com/problems/binary-search-tree-iterator/description/

    相关文章

      网友评论

        本文标题:173. 二叉搜索树迭代器

        本文链接:https://www.haomeiwen.com/subject/klnnoftx.html