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

力扣面试150题--二叉搜索树迭代器

Day 50

题目描述

在这里插入图片描述

思路

初次思路:想的比较简单,在构造这个类的时候,直接求出中序遍历,存放在一个数组中,维护一个序号,当然这个不满足进阶做法的空间复杂度,因为需要保存中序遍历的所有值。

/*** 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 {public TreeNode root;public List<TreeNode>mid;int i=0;public BSTIterator(TreeNode root) {mid=new ArrayList<TreeNode>();findmin(root);}public void findmin(TreeNode root){if(root==null){return;}findmin(root.left);mid.add(root);findmin(root.right);}public int next() {int res= mid.get(i).val;i++;return res;}public boolean hasNext() {if(i>=mid.size()){return false;}else{return true;}}
}/*** 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();*/

进阶做法:(题解)
迭代做法,我们知道取得中序遍历可以通过栈来实现,那么就把中序遍历采取非递归写法,每次获取下一个节点,就从栈中取出一个节点,并且处理它后面需要压入栈的节点处理了。这样就满足了进阶的空间复杂度。

class BSTIterator {private TreeNode cur;private Deque<TreeNode> stack;public BSTIterator(TreeNode root) {cur = root;stack = new LinkedList<TreeNode>();}public int next() {while (cur != null) {stack.push(cur);cur = cur.left;}cur = stack.pop();int ret = cur.val;cur = cur.right;return ret;}public boolean hasNext() {return cur != null || !stack.isEmpty();}
}
http://www.xdnf.cn/news/660835.html

相关文章:

  • Spring参数解析异常:Name for argument of type [java.lang.String] not specified 深度解析
  • 【Spring AI集成实战】基于NVIDIA LLM API构建智能聊天应用:从配置到函数调用全解析
  • PT_THREAD 的嵌套协程示例
  • 唯一原生适配鸿蒙电脑的远程控制应用,向日葵正式上线
  • MyBatis-Plus 深度解析与高效实践指南
  • Spring Security6.5 菜鸟教程
  • HarmonyOS NEXT~HarmonyOS 语言仓颉:下一代分布式开发语言的技术解析与应用实践
  • PostgreSQL 权限问题解决方案查看磁盘多少GB 已使用多少GB
  • 20250526-C++基础-函数指针
  • Pyhton_25_5_26
  • 中断和异常
  • 2025-05-26 什么是“AI 全栈”
  • K8s中间件Kafka上云部署
  • Treasures in Discarded Weights for LLM Quantization阅读
  • 华为OD机试_2025 B卷_欢乐的周末(Python,100分)(附详细解题思路)
  • Anaconda 在 Windows 上的安装教程
  • SpringBoot3集成Oauth2.1——7数据库存储用户信息
  • 基于DDD的企业团餐订餐平台微服务架构设计与实现(二)
  • GitLab 18.0 正式发布,15.0 将不再受技术支持,须升级【二】
  • sd webui 安装sd-webui-TemporalKit 加载报错解决办法
  • Java-ArrayList集合的遍历方式详解
  • uni-app学习笔记十五-vue3中defineExpose的使用
  • 如何用Python搭建一个网站
  • Qwen-Agent的使用示例-天气查询
  • Spring + MyBatis/MyBatis-Plus 分页方案(limit分页和游标分页)详解
  • 【排错】kylinLinx环境python读json文件报错UTF-8 BOM
  • WEB安全--RCE--webshell HIDS bypass3
  • try-with-resources
  • md650场景联动
  • 华为OD机试真题——考勤信息(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现