当前位置:网站首页>力扣(LeetCode)173. 二叉搜索树迭代器(2022.06.22)
力扣(LeetCode)173. 二叉搜索树迭代器(2022.06.22)
2022-06-23 07:33:00 【ChaoYue_miku】
实现一个二叉搜索树迭代器类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, 105] 内
0 <= Node.val <= 106
最多调用 105 次 hasNext 和 next 操作
进阶:
你可以设计一个满足下述条件的解决方案吗?next() 和 hasNext() 操作均摊时间复杂度为 O(1) ,并使用 O(h) 内存。其中 h 是树的高度。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/binary-search-tree-iterator
C++提交内容:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */
class BSTIterator {
private:
TreeNode* cur;
stack<TreeNode*> stk;
public:
BSTIterator(TreeNode* root): cur(root) {
}
int next() {
while (cur != nullptr) {
stk.push(cur);
cur = cur->left;
}
cur = stk.top();
stk.pop();
int ret = cur->val;
cur = cur->right;
return ret;
}
bool hasNext() {
return cur != nullptr || !stk.empty();
}
};
/** * Your BSTIterator object will be instantiated and called as such: * BSTIterator* obj = new BSTIterator(root); * int param_1 = obj->next(); * bool param_2 = obj->hasNext(); */
边栏推荐
- Eureka服务注册与发现
- Qt 使用QDomDocument读取xml文件
- Test APK exception control nettraffic attacker development
- Matlab random volatility SV, GARCH using MCMC Markov chain Monte Carlo method to analyze exchange rate time series
- 浅析 Open API 设计规范
- 图像分割-改进网络结构
- Hackers use new PowerShell backdoors in log4j attacks
- GIF验证码分析
- HCIP之路
- @What is the difference between controller and @restcontroller?
猜你喜欢

Acwing第 56 场周赛【完结】

Talk about routing design in service governance

The Sandbox 与《足球小将》达成合作,将流行的足球漫画及动画带入元宇宙

通过端口查文件

openvino系列 19. OpenVINO 与 PaddleOCR 实现视频实时OCR处理

建立一有序的顺序表,并实现下列操作: 1.把元素x插入表中并保持有序; 2.查找值为x的元素,若找到将其删除; 3.输出表中各元素的值。

Playwirght getting started

vtk. JS left mouse button sliding to change window level and window width

ArcMap批量删除距离较近的点

Friends of the week
随机推荐
Pseudocode specification, pseudocode online editor,
分布式ID生成
C# richTextBox控制最大行数
Unity audio visualization scheme
Quick sort + bubble sort + insert sort + select sort
2022山东大学软件学院软件项目管理期末考试(回忆版)
@What is the difference between controller and @restcontroller?
Query on the performance of multi table view in MySQL
qt 不规则图形 消除锯齿
Apache Solr 任意文件读取复现
Ignore overlength parameter violation
Socket programming (multithreading)
php序列化和反序列化-ctf
Socket programming -- select model
Unity picture loading and saving
Talk about routing design in service governance
浅析 Open API 设计规范
Using jetpack datastore for data storage
C#重启应用程序
Matlab随机波动率SV、GARCH用MCMC马尔可夫链蒙特卡罗方法分析汇率时间序列