# LeetCode:Binary Search Tree Iterator

545人阅读 评论(0)

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

0
0

个人资料
• 访问：390578次
• 积分：6794
• 等级：
• 排名：第4134名
• 原创：321篇
• 转载：1篇
• 译文：0篇
• 评论：34条
博客专栏
 FFmpeg4Android 文章：7篇 阅读：844
 LeetCode解题记录 文章：215篇 阅读：275776
 Java源码解析 文章：12篇 阅读：12987
阅读排行
最新评论
个人收藏
友情链接