[二叉搜索树]leetcode173:二叉搜索树迭代器(medium)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_43152052/article/details/100177803

题目:
在这里插入图片描述

题解:
本题规定了时间复杂度为O(h)而不是为O(n),所以我们用栈模拟中序遍历过程,将二叉排序树的左节点存入栈中,栈顶元素即为最小值。空间复杂度为O(1),直接返回栈顶元素就可以了。
思路:
仅仅将中序遍历最小值之前的节点压入栈中,当next时我们将栈顶元素取出即为最小值返回,当然在此之前需要将下一个最小值找到,并将路径上的所有节点压入栈中以供使用,查看是否迭代到头只需判断栈是否为空即可。

代码如下:

class BSTIterator {
private:
    stack<TreeNode*> record;
public:
    BSTIterator(TreeNode* root) {
       while(root){//中序遍历将左子树的所有左节点全部压入栈中,栈顶元素为最小值
           record.push(root);
           root=root->left;
       }
    }
    /** @return the next smallest number */
    int next() {
        TreeNode* node=record.top();record.pop();
        int result=node->val;//栈顶元素为最小值
        node=node->right;//下一个最小值当然出现在node节点的右子树中
        while(node)//在将最小值找到后,需要将下一个最小值找到
        {
            record.push(node);
            node=node->left;
        }
        return result;
    }
    
    /** @return whether we have a next smallest number */
    bool hasNext() {//判断栈是否为空即可
        return !record.empty();
    }
};

猜你喜欢

转载自blog.csdn.net/qq_43152052/article/details/100177803
今日推荐