Binary Search Tree Iterator
Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the root node of a BST.
Callingnext()will return the next smallest number in the BST.
Note:next()andhasNext()should run in average O(1) time and uses O(h) memory, wherehis the height of the tree.
public class BSTIterator {
Stack<TreeNode> st = new Stack<>();
public BSTIterator(TreeNode root) {
pushBST(root);
}
public void pushBST(TreeNode root) {
while(root != null) {
st.push(root);
root = root.left;
}
}
/** @return whether we have a next smallest number */
public boolean hasNext() {
return !st.isEmpty();
}
/** @return the next smallest number */
public int next() {
if(!st.isEmpty()){
TreeNode node = st.pop();
pushBST(node.right);
return node.val;
}
return -1;
}
}