2021.3.28
173. 二叉搜索树迭代器
https://leetcode-cn.com/problems/binary-search-tree-iterator/
实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器:
 BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。
 boolean hasNext() 如果向指针右侧遍历存在数字,则返回 true ;否则返回 false 。
 int next()将指针向右移动,然后返回指针处的数字。
注意,指针初始化为一个不存在于 BST 中的数字,所以对 next() 的首次调用将返回 BST 中的最小元素。
你可以假设 next() 调用总是有效的,也就是说,当调用 next() 时,BST 的中序遍历中至少存在一个下一个数字。
示例:
输入
["BSTIterator", "next", "next", "hasNext", "next", "hasNext", "next", "hasNext", "next", "hasNext"]
[[[7, 3, 15, null, null, 9, 20]], [], [], [], [], [], [], [], [], []]
输出
[null, 3, 7, true, 9, true, 15, true, 20, false]
解释
BSTIterator bSTIterator = new BSTIterator([7, 3, 15, null, null, 9, 20]);
bSTIterator.next(); // 返回 3
bSTIterator.next(); // 返回 7
bSTIterator.hasNext(); // 返回 True
bSTIterator.next(); // 返回 9
bSTIterator.hasNext(); // 返回 True
bSTIterator.next(); // 返回 15
bSTIterator.hasNext(); // 返回 True
bSTIterator.next(); // 返回 20
bSTIterator.hasNext(); // 返回 False
提示:
树中节点的数目在范围 [1, $10^5$] 内0 <= Node.val <= $10^6$
最多调用 105 次 hasNext 和 next 操作
进阶:
你可以设计一个满足下述条件的解决方案吗?next() 和 hasNext() 操作均摊时间复杂度为 O(1) ,并使用 O(h) 内存。其中 h 是树的高度。
学到的知识点:迭代器
问就是不会写,只会用个列表把树先遍历存储
这个方法是在 341. 扁平化嵌套列表迭代器 中学到的。
代码:
public class BSTIterator {
int index = 0;
List<int> list;
public BSTIterator(TreeNode root) {
list = new List<int>();
ReadTree(root);
}
public int Next() {
return list[index++];
}
public bool HasNext() {
if(index < list.Count){
return true;
}
else{
return false;
}
}
public void ReadTree(TreeNode node){
if(node.left!=null){
ReadTree(node.left);
}
list.Add(node.val);
if(node.right!=null){
ReadTree(node.right);
}
}
}
迭代器待写
希望我提供的帮助能够补偿你在这里花费的时间。
- 本文链接:https://shinya754.github.io/2021/03/29/%E5%8A%9B%E6%89%A3173-%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E8%BF%AD%E4%BB%A3%E5%99%A8/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。