LeetCode 94. 二叉树的中序遍历(Inorde
一、题目描述给定一个二叉树的根节点root返回它的中序遍历​ 结果。中序遍历顺序左子树 → 根节点 → 右子树示例输入root [1,null,2,3] 输出[1,3,2]输入root [] 输出[]输入root [1] 输出[1]二、为什么这题“看起来简单但值得深究”如果你熟悉递归这题一句话就能写完先遍历左子树再访问根再遍历右子树。但问题是递归写法真的理解了吗能不能用 O(1) 额外空间不算递归栈完成面试官会不会让你写迭代版 所以我们必须从递归 → 迭代 → Morris 遍历​ 逐层推进。三、核心思想中序遍历的本质1️⃣ 递归视角最直观中序遍历的规则是固定的inorder(root): inorder(left) visit(root) inorder(right)递归之所以成立是因为二叉树天然具有子问题结构每一棵子树都满足同样的遍历规则2️⃣ 迭代视角显式栈递归本质上使用的是系统调用栈。如果我们手动维护一个栈一路向左走到底弹栈访问节点转向右子树 这就是中序遍历的迭代写法。3️⃣ Morris 遍历O(1) 额外空间Morris 遍历的核心思想是利用二叉树中原本为 null 的指针临时建立“线索”遍历完成后再恢复结构。它不需要栈也不修改节点 val只调整指针。四、解法一递归最推荐面试首选思路左子树根右子树Java 实现class Solution { public ListInteger inorderTraversal(TreeNode root) { ListInteger res new ArrayList(); inorder(root, res); return res; } private void inorder(TreeNode node, ListInteger res) { if (node null) return; inorder(node.left, res); res.add(node.val); inorder(node.right, res); } }复杂度分析指标数值时间复杂度O(n)空间复杂度O(h)递归栈h 为树高✅面试时90% 情况写到这就够了。五、解法二迭代显式栈核心流程当前节点一直向左走沿途入栈弹栈访问节点转向右子树重复步骤 1Java 实现class Solution { public ListInteger inorderTraversal(TreeNode root) { ListInteger res new ArrayList(); DequeTreeNode stack new ArrayDeque(); TreeNode cur root; while (cur ! null || !stack.isEmpty()) { while (cur ! null) { stack.push(cur); cur cur.left; } cur stack.pop(); res.add(cur.val); cur cur.right; } return res; } }复杂度分析指标数值时间复杂度O(n)空间复杂度O(h)✅适合面试官追问“不用递归怎么写”的场景。六、解法三Morris 中序遍历O(1) 空间核心思想如果左子树为空访问当前节点走向右子树如果左子树不为空找到左子树中最右的节点前驱将其right指向当前节点当前节点移向左子树当第二次回到当前节点时恢复指针并访问Java 实现class Solution { public ListInteger inorderTraversal(TreeNode root) { ListInteger res new ArrayList(); TreeNode cur root; while (cur ! null) { if (cur.left null) { res.add(cur.val); cur cur.right; } else { TreeNode pre cur.left; while (pre.right ! null pre.right ! cur) { pre pre.right; } if (pre.right null) { pre.right cur; cur cur.left; } else { pre.right null; res.add(cur.val); cur cur.right; } } } return res; } }复杂度分析指标数值时间复杂度O(n)空间复杂度O(1) ✅✅这是真正的“不借助栈、O(1) 空间”解法。七、三种解法对比总结解法是否推荐空间复杂度面试评价递归⭐⭐⭐⭐⭐O(h)最常用最安全迭代⭐⭐⭐⭐O(h)展示基本功Morris⭐⭐⭐O(1)高级加分项八、面试高频追问❓为什么中序遍历是有序的​✅ 因为 BST 的中序遍历天然递增。❓递归和迭代哪个更好​✅ 面试先写递归再补迭代。❓Morris 遍历会破坏树结构吗​✅ 不会指针会被恢复。九、一句话总结递归写左中右迭代显式用栈Morris 借指针中序遍历不再难。

相关新闻

从“方阵的行列式”说起:一次对数学严谨性的追问

从“方阵的行列式”说起:一次对数学严谨性的追问

在翻阅线性代数教材时,我们常常会路过一些看似平淡无奇的标题。它们安安静静地躺在章节的某个角落,不似“特征向量”那般高深,也不如“矩阵乘法”那样频繁登场。然而,当我们停下目光,细细咀嚼时,却可能发现其中藏着一个微妙的疑问——就像我的那位读者提出的那样:“行列…

2026/6/30 0:58:05阅读更多 →
反思与自我改进:Agent自我批评、经验学习与技能库构建的闭环

反思与自我改进:Agent自我批评、经验学习与技能库构建的闭环

引言:当Agent不再需要“手把手教” 2026年,AI Agent领域正在经历一场静默而深刻的范式转移。 过去两年,我们见证了Agent从“只会聊天”到“会调用工具”的跨越。OpenClaw凭借3000+社区Skills成为技能生态最大的消费者之一;Claude Code让开发者可以用自然语言驱动代码编写…

2026/6/30 0:58:05阅读更多 →
百考通降重不扭曲原意,降AI不牺牲逻辑

百考通降重不扭曲原意,降AI不牺牲逻辑

学术写作的终极目标是什么? 是剔除情绪干扰,追求客观表达; 是构建严密逻辑,避免思维跳跃; 是使用规范术语,拒绝模糊指代; 是结构工整、层次分明、论证闭环。 这些,是数百年学术共同…

2026/6/30 0:58:05阅读更多 →
昇腾310B加持的算力矩阵:香橙派四款AI产品全面解析

昇腾310B加持的算力矩阵:香橙派四款AI产品全面解析

端侧AI爆发,硬件底座准备好了吗?随着端侧AI的持续发展,开发者们发现,大模型不一定要跑在云端,部分边缘设备也能跑得动。但跑得动和跑得好之间,隔着不小的算力差距。香橙派此前推出的四款基于昇腾Atlas 310B…

2026/6/30 2:03:09阅读更多 →
深度解析Harness Engineering工程体系,拆解大模型可控落地原理与完整实战流程19.8

深度解析Harness Engineering工程体系,拆解大模型可控落地原理与完整实战流程19.8

一、前言不知道大家有没有遇到同样的情况,在大模型场景应用越多,越发现单独调用大模型API效果尚可,但落地到真实业务就频繁出问题。要么模型输出随意、频繁产生幻觉,要么无法对接业务工具、流程混乱,要么成本失控、输出…

2026/6/30 2:03:09阅读更多 →
前端测试体系建设

前端测试体系建设

前端测试体系建设是现代Web开发中不可或缺的一环。随着前端技术的快速发展和应用复杂度的提升,如何确保代码质量、提升开发效率成为团队面临的核心挑战。一个完善的前端测试体系不仅能减少线上Bug,还能增强团队协作信心,为持续集成和交付奠定…

2026/6/30 2:03:09阅读更多 →
移动端性能监控

移动端性能监控

移动端性能监控:提升用户体验的关键 在移动互联网时代,应用性能直接影响用户体验和业务转化。卡顿、崩溃、加载缓慢等问题可能导致用户流失,因此移动端性能监控成为开发者必须关注的核心环节。通过实时监测和分析性能指标,团队可…

2026/6/30 2:03:09阅读更多 →
如何选择靠谱的GEO优化服务商?

如何选择靠谱的GEO优化服务商?

《年预算不到两万,选GEO服务商总怕打水漂?这3个决策指标你一定要看》 很多实体店老板最近都在焦虑一件事:客户开始用AI找店了,但自己投了几千块做推广,效果却像石头扔进水里——连个响都没有。根据2026年GEO服务价格白…

2026/6/30 2:03:09阅读更多 →
Lean 4实战指南:5个步骤掌握下一代定理证明编程语言

Lean 4实战指南:5个步骤掌握下一代定理证明编程语言

Lean 4实战指南:5个步骤掌握下一代定理证明编程语言 【免费下载链接】lean4 Lean 4 programming language and theorem prover 项目地址: https://gitcode.com/GitHub_Trending/le/lean4 在软件开发领域,我们常常面临一个核心挑战:如何…

2026/6/30 1:58:09阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/29 3:27:55阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/29 2:19:08阅读更多 →
为什么你需要Destiny 2 Solo Enabler:技术原理与实战指南

为什么你需要Destiny 2 Solo Enabler:技术原理与实战指南

为什么你需要Destiny 2 Solo Enabler:技术原理与实战指南 【免费下载链接】Destiny-2-Solo-Enabler Repo containing the C# and XAML code for the D2SE program. Included is also the dependency for the program, and image asset. 项目地址: https://gitcode…

2026/6/30 0:02:58阅读更多 →
第六章:PowerPoint 2010 核心功能与实战应用 —— 从入门到精通

第六章:PowerPoint 2010 核心功能与实战应用 —— 从入门到精通

1. PowerPoint 2010基础操作全攻略 刚接触PowerPoint 2010时,很多人会被它复杂的界面吓到。其实只要掌握几个核心区域,就能快速上手。我最开始用PPT时,经常找不到功能按钮在哪,后来发现主要操作都集中在顶部功能区。 工作窗口主要…

2026/6/30 0:02:58阅读更多 →
XGBoost超参数实战:从理论到调优策略

XGBoost超参数实战:从理论到调优策略

1. XGBoost超参数基础认知 第一次接触XGBoost时,我被它那密密麻麻的参数列表吓到了。这感觉就像面对一架波音747的驾驶舱——每个按钮都可能有神奇的效果,但按错了就可能坠机。经过多年实战,我发现其实掌握十几个核心参数就能解决90%的问题。…

2026/6/30 0:02:59阅读更多 →