leetcode173. 二叉搜索树迭代器

传送门
leetcode173. 二叉搜索树迭代器_第1张图片

实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。调用 next() 将返回二叉搜索树中的下一个最小的数。

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

假设 next() 调用总是有效的,也就是说,当调用 next() 时,BST 中至少存在一个下一个最小的数。

用自己的栈加上简单迭代的方式遍历树。其中栈顶是当前的答案节点。
其中要用到辅助函数findMin(root):
将给定节点中的所有左子节点添加到栈中,直到节点没有左子节点为止。
hashNext() 只用简单判断栈是不是空就行了
这里next() 时间复杂度平均O(1) ??

	Stack<TreeNode> stk;
    public BSTIterator(TreeNode root) {
     
        stk = new Stack<>();
        findMin(root); // 不要忘了初始化的入栈操作!
    }
    
    public void findMin(TreeNode root) {
     
        while (root != null) {
     
            stk.push(root);
            root = root.left;
        }
    }
    public int next() {
     
        TreeNode ansNode = stk.pop(); // 栈顶就是答案
		//栈顶右儿子不空,则相对于以ansNode.right 为根执行BSTIterator
        if (ansNode.right != null)
            findMin(ansNode.right);
        return ansNode.val;
    }
    public boolean hasNext() {
     
        return !stk.empty();
	}

你可能感兴趣的:(leetcode,leetcode,二叉树)