您的位置:首页 > 其它

LeetCode:Binary Search Tree Iterator

2016-06-01 16:18 405 查看


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();
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: