设计数据结构,用一个内部的stack存所有小于root的节点,即push的顺序是从大到小的,实现一个pushall函数 就是push这个node一直往左走路径上的所有节点。
public class BSTIterator {
private Stack<TreeNode> stack = new Stack<TreeNode>();
public BSTIterator(TreeNode root) {
pushAll(root);
}
private void pushAll(TreeNode node) {
while ( node != null ){
stack.push(node);
node = node.left;
}
}
/** @return whether we have a next smallest number */
public boolean hasNext() {
return !stack.isEmpty();
}
/** @return the next smallest number */
public int next() {
TreeNode cur = stack.pop();
pushAll(cur.right);
return cur.val;
}
}