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

[面试精选] 0094. 二叉树的中序遍历

文章目录

      • 1. 题目链接
      • 2. 题目描述
      • 3. 题目示例
      • 4. 解题思路
      • 5. 题解代码
      • 6. 复杂度分析

1. 题目链接


94. 二叉树的中序遍历 - 力扣(LeetCode)

2. 题目描述


给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。


3. 题目示例


示例 1 :

输入:root = [1,null,2,3]
输出:[1,3,2]

示例 2 :

输入:root = []
输出:[]

4. 解题思路


  1. 颜色标记法
    • 使用颜色标记节点状态:1(未访问)、2(已访问)
    • 模拟递归栈的调用过程,但通过显式栈实现
  2. 栈操作顺序
    • 对于未访问节点(color=1),按"右-根-左"顺序入栈
    • 这样出栈顺序就是"左-根-右",符合中序遍历要求
  3. 关键点
    • 通过颜色标记避免重复处理
    • 显式栈替代递归调用栈
    • 空节点直接跳过

5. 题解代码


class Solution {// 辅助节点类,用于标记节点状态class Node {TreeNode node;  // 树节点int color;      // 颜色标记:1表示未访问,2表示已访问Node(TreeNode node, int color) {this.node = node;this.color = color;}}// 中序遍历方法public List<Integer> inorderTraversal(TreeNode root) {List<Integer> ans = new ArrayList<>();  // 存储遍历结果Deque<Node> stack = new LinkedList<>();  // 使用双端队列模拟栈// 空树直接返回if (root == null) return ans;// 初始状态:根节点标记为未访问stack.push(new Node(root, 1));while (!stack.isEmpty()) {Node cur = stack.pop();  // 弹出栈顶元素// 跳过空节点if (cur.node == null) continue;if (cur.color == 1) {  // 未访问节点// 按照"右-根-左"顺序入栈(出栈顺序为"左-根-右")stack.push(new Node(cur.node.right, 1));  // 右子节点(未访问)stack.push(new Node(cur.node, 2));        // 当前节点标记为已访问stack.push(new Node(cur.node.left, 1));   // 左子节点(未访问)} else {  // 已访问节点ans.add(cur.node.val);  // 添加到结果列表}}return ans;}
}

6. 复杂度分析


  1. 时间复杂度:O(n)
    • 每个节点被访问两次(入栈和出栈)
    • 但常数系数为2,仍为线性复杂度
  2. 空间复杂度:O(n)
    • 栈的最大深度等于树的高度
    • 最坏情况下(斜树)为O(n)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/236778.html

相关文章:

  • UDP 与 TCP 调用接口的差异:面试高频问题解析与实战总结
  • SQL慢可能是触发了ring buffer
  • Ubuntu下有关UDP网络通信的指令
  • Vue学习之---nextTick
  • 《经济学原理》第9版第5章弹性及其应用
  • Nodejs工程化实践:构建高性能前后端交互系统
  • PC与Windows远程连接与串流:方案简介(ZeroTier + Parsec、Moonlight + Sunshine、网易UU远程)
  • [C++] list双向链表使用方法
  • Spring AI 核心工作流
  • Spring Boot + Thymeleaf 防重复提交
  • 微前端架构下的B端页面设计:模块化与跨团队协作的终极方案
  • Oracle业务用户的存储过程个数及行数统计
  • Qt的学习(一)
  • VNA校准基础知识
  • 行为型设计模式之Interpreter(解释器)
  • Global Security Market知识点总结:主经纪商业务
  • Lodash原型污染漏洞原理详解
  • HttpURLConnection实现
  • 【商城saas和商城源码的区别】
  • Ubuntu 下开机自动执行命令的方法
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(三十一) -> 同步云端代码至DevEco Studio工程
  • 影响特性阻抗的因素-信号与电源完整性分析
  • C++学习-入门到精通【16】自定义模板的介绍
  • 亚川科技IBMS集成管理平台:构建商业综合体智慧中枢
  • 【小红书拥抱开源】小红书开源大规模混合专家模型——dots.llm1
  • 比较数据迁移后MySQL数据库和ClickHouse数据仓库中的表
  • BERT, GPT, Transformer之间的关系
  • 北大开源音频编辑模型PlayDiffusion,可实现音频局部编辑,比传统 AR 模型的效率高出 50 倍!
  • 内存泄漏检测工具-学习(一)
  • Ctrl-Crash 助力交通安全:可控生成逼真车祸视频,防患于未然