请实现二叉搜索树的迭代器BSTIterator,它主要有如下3个函数。
如果对二叉树的中序遍历的迭代代码足够熟悉,我们就会注意到中序遍历的迭代代码中有一个while循环,循环的条件为true时循环体每执行一次就遍历二叉树的一个节点。当while循环的条件为false时,二叉树中的所有节点都已遍历完。因此,中序遍历的迭代代码中的while循环可以看成迭代器hasNext的判断条件,而while循环体内执行的操作就是函数next执行的操作。
public class BSTIterator {
TreeNode cur;
Stack<TreeNode> stack;
public BSTIterator(TreeNode root) {
cur = root;
stack = new Stack<>();
}
public boolean hasNext() {
return cur != null || !stack.isEmpty();
}
public int next() {
while (cur != null) {
stack.push(cur);
cur = cur.left;
}
cur = stack.pop();
int val = cur.val;
cur = cur.right;
return val;
}
}