当前位置: 首页 > news >正文

(nice!!!)(LeetCode 面试经典 150 题) 173. 二叉搜索树迭代器 (栈)

题目:173. 二叉搜索树迭代器

在这里插入图片描述
在这里插入图片描述
思路:栈,时间复杂度0(n)。

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 {
public:stack<TreeNode*> st;TreeNode * tr; BSTIterator(TreeNode* root) {tr=root;}int next() {//每次先中序遍历trwhile(tr!=nullptr){st.push(tr);tr=tr->left;}// 确保当前是中序遍历的第一个节点tr=st.top();st.pop();int tmp=tr->val;//保留当前节点的右子树,便于下次接着进行中序遍历tr=tr->right;return tmp;}bool hasNext() {return tr!=nullptr || st.size()!=0 ;}
};/*** 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();*/

JAVA版本:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class BSTIterator {TreeNode tr;Deque<TreeNode> st;public BSTIterator(TreeNode root) {tr=root;st=new LinkedList<TreeNode>();}public int next() {while(tr!=null){st.push(tr);tr=tr.left;}tr=st.pop();int tmp=tr.val;tr=tr.right;return tmp;}public boolean hasNext() {return tr!=null || !st.isEmpty() ;}
}/*** Your BSTIterator object will be instantiated and called as such:* BSTIterator obj = new BSTIterator(root);* int param_1 = obj.next();* boolean param_2 = obj.hasNext();*/

GO版本:

/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
type BSTIterator struct {tr *TreeNodest []*TreeNode
}func Constructor(root *TreeNode) BSTIterator {return BSTIterator{tr:root}
}func (this *BSTIterator) Next() int {for this.tr!=nil {this.st=append(this.st,this.tr)this.tr=this.tr.Left}this.tr=this.st[len(this.st)-1];this.st=this.st[:len(this.st)-1]tmp:=this.tr.Valthis.tr=this.tr.Rightreturn tmp
}func (this *BSTIterator) HasNext() bool {return this.tr!=nil || len(this.st)>0
}/*** Your BSTIterator object will be instantiated and called as such:* obj := Constructor(root);* param_1 := obj.Next();* param_2 := obj.HasNext();*/
http://www.dtcms.com/a/347309.html

相关文章:

  • portswigger labs XXE漏洞利用实战
  • 一次转向:从 当前讨论到 拼PIN语言的拼块语言理论体系
  • 嵌入式软件/硬件工程师面试题集
  • 从观众席到股东席,何猷君成NBA凯尔特人新Co-owner
  • 网址账号正确,密码错误返回的状态码是多少
  • Java基础面试题(04)—Java(Java中String StringBuffer 和 StringBuilder的区别)
  • 山西某焦化厂炼焦区电气维护系统无线传输解决方案实施案例
  • Mangio RVC Fork 本地部署(Cuda12.9)
  • 蓝牙aoa仓库管理系统功能介绍
  • 有哪些Spring Boot微服务架构成功落地的案例?
  • GitHub发布革命性工具:GitHub Spark,用自然语言打造全栈智能应用
  • yolo命令行-训练篇(三)
  • Android安卓学习日志1 聊一聊安卓的历史和笔者的想法
  • 微服务统一入口——Gateway
  • 航空复杂壳体零件深孔检测方法 - 激光频率梳 3D 轮廓检测
  • 把 AI 塞进「自行车码表」——基于 MEMS 的 3D 地形预测码表
  • 基础IO
  • electron进程间通信-IPC通信注册机制
  • SAP FI 应收应付账龄分析
  • MySQL 锁的详解:从 InnoDB 到死锁诊断实战
  • Hive Metastore和Hiveserver2启停脚本
  • 爱普生打印机的使用
  • day40-tomcat
  • UE C++ 堆化
  • 【卫星通信】超低码率语音编码ULBC:EnCodec神经音频编解码器架构深度解析
  • 随机森林2——集成学习的发展
  • TCP:传输控制协议
  • JAVA核心基础篇-递归
  • C 语言标准输入输出头文件stdio.h及其常见用法
  • 【读论文】Qwen-Image技术报告解读