题目描述:
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.
Example:
BSTIterator iterator = new BSTIterator(root); iterator.next(); // return 3 iterator.next(); // return 7 iterator.hasNext(); // return true iterator.next(); // return 9 iterator.hasNext(); // return true iterator.next(); // return 15 iterator.hasNext(); // return true iterator.next(); // return 20 iterator.hasNext(); // return false
思路:
二叉树搜索树的中序遍历是升序序列。
实现:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
import java.util.Stack;
class BSTIterator {
TreeNode curr=null;
Stack<TreeNode> s=new Stack<>();
public BSTIterator(TreeNode root) {
curr=root;
}
/** @return the next smallest number */
public int next() {
while(curr!=null){
s.push(curr);
curr=curr.left;
}
curr=s.pop();
TreeNode node=curr;
curr=curr.right;
return node.val;
}
/** @return whether we have a next smallest number */
public boolean hasNext() {
return (curr!=null||!s.isEmpty());
}
}