# 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

4

2   7

0 3 5 8

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();
*/

08-18 1333

01-03 3752

08-04 2185

05-28 532

01-18 2369

12-28 2440

04-02 2362

09-04 1642

04-17 1178

04-16 1.2万