LeetCode:Binary Search Tree Iterator

Binary Search Tree Iterator




Total Accepted: 49694  Total Submissions: 141917  Difficulty: Medium

Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the root node of a BST.

Calling next() will return the next smallest number in the BST.

Note: next() and hasNext() should run in average O(1) time and uses O(h) memory, where h is the height of the tree.

Credits:
Special thanks to @ts for adding this problem and creating all test cases.

Subscribe to see which companies asked this question

Hide Tags
  Tree Stack Design
Hide Similar Problems
  (M) Binary Tree Inorder Traversal (M) Flatten 2D Vector (M) Zigzag Iterator (M) Peeking Iterator (M) Inorder Successor in BST




















思路:

设有BST:

   4

 2   7

0 3 5 8


将root的所有“左”孩子入栈stack(4->2->0)

next()方法:

0(栈顶,下同):由于0没有右孩子,无操作,这时stack(4->2);

2:2有右孩子3,将3的“左”孩子入栈,这里stack(4->3);

3:stack(4);

4:stack(7->5)

5:stack(7)

7:stack(8)

8:stack(null)


hasNext()方法:判断stack是否为空即可;



java code:

/**
 * Definition for binary tree
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */

public class BSTIterator {
    
    private Stack<TreeNode> stack = new Stack<TreeNode>();

    public BSTIterator(TreeNode root) {
        pushLeft(root);
    }

    /** @return whether we have a next smallest number */
    public boolean hasNext() {
        return !stack.isEmpty();
    }

    /** @return the next smallest number */
    public int next() {
        TreeNode tmp = stack.pop();
        pushLeft(tmp.right);
        return tmp.val;
    }
    
    // 自定义函数:将“左”孩子入栈
    public void pushLeft(TreeNode root) {
        while(root != null) {
            stack.push(root);
            root = root.left;
        }
    }
}

/**
 * Your BSTIterator will be called like this:
 * BSTIterator i = new BSTIterator(root);
 * while (i.hasNext()) v[f()] = i.next();
 */


你可能感兴趣的:(LeetCode,tree,search,binary,I)