【LeetCode题解】173. 二叉搜索树迭代器
实现一个二叉搜索树迭代器。你将使用二叉搜索树的根节点初始化迭代器。
调用 next() 将返回二叉搜索树中的下一个最小的数。
提示:next() 和 hasNext() 操作的时间复杂度是 O(1),并使用 O(h) 内存,其中 h 是树的高度。
你可以假设 next() 调用总是有效的,也就是说,当调用 next() 时,BST 中至少存在一个下一个最小的数。
题解:
- 对于二叉搜索树来说返回二叉搜索树中的下一个最小的数 = 中序遍历序列
- 中序遍历 = left - visit - right ,非递归时使用辅助栈
- left - visit :从根结点开始,结点及左子树结点依次入栈
- - right:已无左子树或左子树已被访问,弹栈,右子树结点也是一个二叉搜索树的root,递归处理
class BSTIterator {
//二叉搜索树
Stack s = new Stack<>();
public BSTIterator(TreeNode root) {
//
dfs(root);
}/** @return the next smallest number */
public int next() {
TreeNode tmp = s.pop();
//中序遍历的后半段 -right
int ret = tmp.val;
if(tmp.right!=null){
//如有右子树,对右子树递归处理
dfs(tmp.right);
}
return ret;
}/** @return whether we have a next smallest number */
public boolean hasNext() {
if(!s.empty()){
return true;
}else{
return false;
}
}
//中序遍历的前半段 left-visit
void dfs(TreeNode root){
while(root!=null){
s.push(root);
root = root.left;
}
}
}
【【LeetCode题解】173. 二叉搜索树迭代器】
推荐阅读
- 宽容谁
- 我要做大厨
- 增长黑客的海盗法则
- 画画吗()
- 2019-02-13——今天谈梦想()
- 远去的风筝
- 三十年后的广场舞大爷
- 叙述作文
- 20190302|20190302 复盘翻盘
- 学无止境,人生还很长