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

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

题解:
本题规定了时间复杂度为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();
    }
};
上一篇:机器学习超参数优化算法-Hyperband


下一篇:[前缀树]leetcode667:键值映射(medium)