迭代思路
private TreeNode node;
private Stack<TreeNode> stack;
public BSTIterator(TreeNode root) {
this.node =root;
stack = new Stack<>();
}
public int next() {
while (node !=null){
stack.push(node);
node = node.left;
}
node = stack.pop();
int next = node.val;
node = node.right;
return next;
}
public boolean hasNext() {
return node !=null||!stack.isEmpty();
}
思路:基于中序遍历的迭代方案进行改进
每调用一次next获取一个节点的值
同时将原来循环的判断条件提取到hasNext方法中去
注意:
这个方案是基于已经了解中序遍历的迭代方式的基础上进行讲解的,如果有小伙伴不了解,并且想要详细了解中序遍历迭代的讲解思路的,可以点击这里跳转
其他方案
其实还可以把树完整递归遍历一次,存到一个数组中,创建索引变量也可以实现上述功能,leetcode官方也有相应题解,但是我想,实际上迭代器本来就是你要多少就我就做多少,如果说按照这种思路实现的话,小数据量还好,如果是大数据量,无疑会在造成不好的时间损耗,所以我就没有写出来,有兴趣的同学可以点击这里跳转leetcode官方题解