二叉树算法实战:遍历与递归面试题精解
1. 二叉树算法题解系列从遍历到递归的实战精讲最近在整理算法笔记时发现二叉树相关的题目总是高频出现在技术面试中。特别是LeetCode上编号144、145、94、102、226、101、104、111、222这九道经典题目涵盖了前中后序遍历、层次遍历、镜像对称、深度计算、节点统计等核心考点。今天我就用工程化的思维带大家系统性地吃透这些题目分享我在刷题过程中总结的解题模板和避坑指南。2. 基础遍历三连前序/中序/后序2.1 递归解法模板这三类遍历的递归写法是最容易理解的# 前序遍历144题 def preorder(root): if not root: return [] return [root.val] preorder(root.left) preorder(root.right) # 中序遍历94题 def inorder(root): if not root: return [] return inorder(root.left) [root.val] inorder(root.right) # 后序遍历145题 def postorder(root): if not root: return [] return postorder(root.left) postorder(root.right) [root.val]关键记忆点前序-中左右中序-左中右后序-左右中。递归写法虽然简洁但面试时往往要求用迭代实现。2.2 迭代解法精讲迭代写法需要显式使用栈来模拟递归过程。以前序遍历为例def preorderTraversal(root): stack, res [root], [] while stack: node stack.pop() if node: res.append(node.val) stack.append(node.right) # 先右后左 stack.append(node.left) return res中序遍历的迭代写法较为特殊需要指针辅助def inorderTraversal(root): stack, res [], [] curr root while curr or stack: while curr: # 左子树入栈 stack.append(curr) curr curr.left curr stack.pop() res.append(curr.val) curr curr.right return res避坑提示后序遍历的迭代写法最复杂建议先掌握前两种再挑战。可以尝试逆前序反转的思路。3. 层次遍历与变形题目3.1 标准层次遍历102题BFS队列是标准解法def levelOrder(root): from collections import deque queue, res deque([root]), [] while queue: level [] for _ in range(len(queue)): node queue.popleft() if node: level.append(node.val) queue.append(node.left) queue.append(node.right) if level: res.append(level) return res3.2 自底向上层次遍历只需将结果反转return res[::-1]3.3 锯齿形层次遍历通过标志位控制方向reverse False if reverse: level level[::-1] reverse not reverse4. 二叉树属性判断类题目4.1 对称二叉树101题递归判断镜像def isSymmetric(root): def check(l, r): if not l and not r: return True if not l or not r: return False return l.val r.val and check(l.left, r.right) and check(l.right, r.left) return check(root.left, root.right)4.2 二叉树的最大深度104题递归解法最直观def maxDepth(root): if not root: return 0 return 1 max(maxDepth(root.left), maxDepth(root.right))4.3 二叉树的最小深度111题注意与最大深度的区别def minDepth(root): if not root: return 0 if not root.left: return 1 minDepth(root.right) if not root.right: return 1 minDepth(root.left) return 1 min(minDepth(root.left), minDepth(root.right))常见误区直接套用最大深度模板会导致错误。最小深度必须到叶子节点左右子节点都为空5. 进阶题目解析5.1 翻转二叉树226题著名的Homebrew作者面试题def invertTree(root): if root: root.left, root.right invertTree(root.right), invertTree(root.left) return root5.2 完全二叉树的节点个数222题利用完全二叉树性质优化def countNodes(root): if not root: return 0 left_height right_height 0 l r root while l: left_height 1 l l.left while r: right_height 1 r r.right if left_height right_height: # 满二叉树 return 2**left_height - 1 return 1 countNodes(root.left) countNodes(root.right)性能分析时间复杂度优化到O(logN * logN)优于普通二叉树的O(N)解法6. 实战经验与优化技巧递归转迭代的通用方法所有递归算法都可以用栈循环改写但要注意前序/后序适合用显式栈层次遍历适合用队列中序遍历需要额外指针空间复杂度优化Morris遍历可以实现O(1)空间复杂度但会修改树结构调试技巧打印树结构使用层次遍历可视化小规模测试先验证3个节点的简单情况边界检查空树、单节点、左斜树等特殊情况常见面试陷阱问清楚输入是否为None确认节点值是否可能为负数是否需要处理重复值情况模板化训练建议每天练习一种遍历写法对比记忆不同解法的差异手写代码时注意缩进和括号匹配在实际面试中二叉树题目往往作为基础考察点。我建议至少完整刷过三遍这些经典题目第一遍理解思路第二遍优化代码第三遍限时白板编程。记住面试官最看重的是解题过程的沟通能力而不仅仅是最终答案的正确性。

相关新闻

IntelliJ IDEA自定义方法注释模板:提升Java代码规范与团队协作效率

IntelliJ IDEA自定义方法注释模板:提升Java代码规范与团队协作效率

1. 项目概述:为什么我们需要自定义方法注释模板?如果你用 IntelliJ IDEA 写过 Java 项目,大概率经历过这样的场景:写完一个方法,然后手动敲入/**,再一行行补上param、return、throws。重复、枯燥&#xff0…

2026/8/23 21:20:18 阅读更多 →
Docker彻底卸载指南:解决虚拟化错误与残留问题

Docker彻底卸载指南:解决虚拟化错误与残留问题

1. 为什么“彻底卸载”Docker比安装更复杂?如果你在搜索引擎里输入“Docker 彻底卸载”,大概率是遇到了某个让你头疼不已的问题。可能是Docker Desktop启动时那个令人沮丧的“Virtualization support not detected”或“failed to start because virtual…

2026/8/23 21:20:18 阅读更多 →
大厂Java面试核心:Spring Boot与Kafka实战解析

大厂Java面试核心:Spring Boot与Kafka实战解析

1. 大厂Java面试的核心战场去年帮团队面试了三十多位Java工程师,发现一个有趣现象:80%的候选人能说出Spring Boot的自动配置原理,但被问到"为什么你们的服务要采用Kafka而不是RabbitMQ"时,能给出技术选型量化分析的不到…

2026/8/23 21:20:18 阅读更多 →

最新新闻

机器学习模型评估:训练集、验证集、测试集划分与K折交叉验证实战

机器学习模型评估:训练集、验证集、测试集划分与K折交叉验证实战

1. 项目概述:从“炼丹”到“科学实验”的必经之路刚入门机器学习那会儿,我最常听到的一个词就是“过拟合”。当时看着自己精心调教的模型在训练数据上表现近乎完美,一到新数据上就“翻车”,那种感觉就像精心准备了一场演讲&#x…

2026/8/23 22:00:46 阅读更多 →
AI大模型岗位高薪背后的技术与求职策略

AI大模型岗位高薪背后的技术与求职策略

1. 高薪AI岗位背后的行业现状最近在技术圈里,关于AI大模型相关岗位薪资的讨论热度居高不下。作为一名在AI领域摸爬滚打多年的从业者,我想从行业现状、技术要求和求职策略三个维度,和大家聊聊这个现象背后的真实情况。AI大模型领域确实正在经历…

2026/8/23 22:00:46 阅读更多 →
Gradle四层配置契约:properties、settings、build与buildSrc协同原理

Gradle四层配置契约:properties、settings、build与buildSrc协同原理

1. Gradle配置不是“改几个文件”那么简单:它是一套分层协作的构建契约你有没有遇到过这样的场景:在Android Studio里点一下“Sync Project”,Gradle就开始疯狂下载几十个jar包,进度条卡在98%不动,CPU风扇狂转&#xf…

2026/8/23 22:00:46 阅读更多 →
Maven 3.8.1高效配置指南:本地仓库、阿里云镜像与JDK版本指定

Maven 3.8.1高效配置指南:本地仓库、阿里云镜像与JDK版本指定

1. 从零到一:为什么你的Maven配置总是不对劲?如果你刚开始接触Java开发,或者刚从别人手里接过一个项目,大概率会遇到一个让人头疼的问题:项目依赖死活下载不下来,控制台一片红,各种“Could not …

2026/8/23 21:58:45 阅读更多 →
CTR校准:推荐系统概率预估失真的数学修正与工程实践

CTR校准:推荐系统概率预估失真的数学修正与工程实践

1. 项目概述:为什么CTR校准是推荐系统的“定盘星”?在推荐系统这个行当里干了十几年,我见过太多团队把模型AUC、线上AB测试的CTR提升当作终极目标,吭哧吭哧优化模型结构、引入新特征,结果上线后预估的CTR和真实的CTR对…

2026/8/23 21:57:45 阅读更多 →
2026年Java面试核心:八股文背后的技术本质与实战

2026年Java面试核心:八股文背后的技术本质与实战

1. 为什么2026年Java面试依然需要"背八股"?在技术面试领域,"八股文"这个说法源自古代科举考试,如今被用来形容那些反复出现、模式固定的技术面试题。作为经历过上百场技术面试的面试官,我发现Java领域的"…

2026/8/23 21:57:45 阅读更多 →

日新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:00:50 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:00:50 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:00:50 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/23 0:00:50 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/23 0:00:50 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/23 0:00:50 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/23 18:47:06 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/22 3:22:48 阅读更多 →