二叉树最小深度:递归与BFS解法详解
1. 二叉树最小深度问题解析今天我们来聊聊LeetCode上第111题二叉树的最小深度这是二叉树类题目中的经典入门题。很多人在面试时都遇到过这个题目看似简单却暗藏玄机。我第一次做这题时也踩过坑后来在实际工作中发现这类基础算法思想在解决实际问题时特别有用。最小深度是指从根节点到最近叶子节点的最短路径上的节点数量。注意是到叶子节点的距离叶子节点是指没有子节点的节点。这与最大深度二叉树的高度有本质区别很多人容易混淆这两个概念。2. 问题分析与解法思路2.1 理解题目要求首先我们需要明确几个关键点最小深度的定义是从根节点到最近叶子节点的最短路径叶子节点是指左右子节点都为空的节点空树的最小深度为0只有根节点的树最小深度为1常见误区是把最小深度简单理解为左右子树最小深度的较小值加1。这种思路在遇到单边子树时会出错比如当左子树为空时最小深度应该是右子树的最小深度加1而不是1因为此时根节点不是叶子节点。2.2 递归解法详解递归是最直观的解法代码简洁但需要理解递归终止条件def minDepth(root): if not root: return 0 if not root.left: return minDepth(root.right) 1 if not root.right: return minDepth(root.left) 1 return min(minDepth(root.left), minDepth(root.right)) 1这个解法的时间复杂度是O(n)因为每个节点只访问一次。空间复杂度在最坏情况下树退化为链表是O(n)平均情况下是O(logn)。注意递归解法要特别注意单边子树的情况这是最容易出错的地方。我在面试候选人时发现90%的错误都发生在这里。2.3 迭代解法BFS实现广度优先搜索BFS是更高效的解法因为它可以在找到第一个叶子节点时立即返回而不需要遍历整棵树from collections import deque def minDepth(root): if not root: return 0 queue deque([(root, 1)]) while queue: node, depth queue.popleft() if not node.left and not node.right: return depth if node.left: queue.append((node.left, depth 1)) if node.right: queue.append((node.right, depth 1)) return 0BFS解法的时间复杂度在最坏情况下是O(n)但平均情况下会比递归更快找到解。空间复杂度是O(n)因为需要存储节点队列。3. 算法优化与变种问题3.1 性能对比与选择递归和迭代两种解法各有优劣递归代码简洁但可能有栈溢出风险极深树BFS更高效适合求最小深度这类最近问题DFS深度优先搜索也可以解但不如BFS直观在实际应用中如果树比较平衡递归解法足够如果树可能很深或偏向一侧BFS更可靠。我在工作中处理大型目录结构时就选择了BFS方案。3.2 常见变种问题基于最小深度问题LeetCode上还有几个变种值得关注最大深度LeetCode 104题平衡二叉树判断LeetCode 110题路径总和问题LeetCode 112题二叉树的所有路径LeetCode 257题这些题目都可以用类似的递归或BFS思路解决建议一起练习。4. 实际应用场景4.1 文件系统最短路径二叉树最小深度算法可以应用于查找文件系统中最短路径。比如我们需要找到一个目录下离根目录最近的空文件夹import os from collections import deque def find_nearest_empty_dir(root_dir): queue deque([(root_dir, 0)]) while queue: current_dir, depth queue.popleft() if not os.listdir(current_dir): return depth for entry in os.listdir(current_dir): path os.path.join(current_dir, entry) if os.path.isdir(path): queue.append((path, depth 1)) return -14.2 网络爬虫策略优化在网络爬虫设计中我们可以用类似算法确定从首页到目标页面的最短点击距离。这有助于优化爬取策略和优先级。5. 常见错误与调试技巧5.1 典型错误案例忽略单边子树情况# 错误解法 def minDepth(root): if not root: return 0 return min(minDepth(root.left), minDepth(root.right)) 1这个解法在输入为[1,2]时会错误返回1而正确答案是2。混淆深度定义把根节点深度算作0还是1要统一LeetCode通常按1开始计数。5.2 调试技巧使用小型测试用例验证边界条件空树 []只有根节点 [1]左斜树 [1,2,null,3]右斜树 [1,null,2,null,3]完全二叉树 [1,2,3,4,5,6]打印递归过程或BFS队列状态观察算法执行流程。6. 进阶思考与扩展6.1 多叉树的最小深度对于多叉树每个节点可能有多个子节点算法思路相同只需调整子节点遍历方式def minDepth(root): if not root: return 0 if not root.children: return 1 return min(minDepth(child) for child in root.children) 16.2 带权重的最小深度问题如果每条边有不同的权重问题就变成了求带权最短路径可以用Dijkstra算法解决。这在网络路由、地图导航等场景很常见。7. 算法复杂度分析让我们详细分析一下递归和BFS两种解法的时间和空间复杂度递归解法时间复杂度O(n)每个节点访问一次空间复杂度最坏O(n)树退化为链表时递归深度为n平均O(logn)BFS解法时间复杂度O(n)最坏情况访问所有节点空间复杂度O(n)队列最多存储n个节点实际测试表明在随机生成的平衡二叉树上BFS通常比递归快20-30%因为可以提前终止。8. 不同语言实现对比8.1 Java实现// BFS解法 public int minDepth(TreeNode root) { if (root null) return 0; QueueTreeNode queue new LinkedList(); queue.offer(root); int depth 1; while (!queue.isEmpty()) { int size queue.size(); for (int i 0; i size; i) { TreeNode node queue.poll(); if (node.left null node.right null) { return depth; } if (node.left ! null) queue.offer(node.left); if (node.right ! null) queue.offer(node.right); } depth; } return depth; }8.2 C实现// 递归解法 int minDepth(TreeNode* root) { if (!root) return 0; if (!root-left) return minDepth(root-right) 1; if (!root-right) return minDepth(root-left) 1; return min(minDepth(root-left), minDepth(root-right)) 1; }不同语言的实现思路相同主要区别在语法和数据结构的使用上。Java通常使用Queue接口C可以直接使用STL的queue。9. 单元测试与验证编写全面的测试用例是确保算法正确性的关键import unittest class TestMinDepth(unittest.TestCase): def test_empty_tree(self): self.assertEqual(minDepth(None), 0) def test_single_node(self): root TreeNode(1) self.assertEqual(minDepth(root), 1) def test_skewed_tree(self): root TreeNode(1) root.left TreeNode(2) root.left.left TreeNode(3) self.assertEqual(minDepth(root), 3) def test_balanced_tree(self): root TreeNode(1) root.left TreeNode(2) root.right TreeNode(3) root.left.left TreeNode(4) self.assertEqual(minDepth(root), 2)10. 实际工程中的应用思考在实际工程中我们很少直接使用这种基础算法但它的思想无处不在。比如在UI渲染树中确定最短更新路径在游戏AI中寻找最短行动序列在社交网络中计算最短关系链在组织架构中查找最近的共同上级理解这些基础算法能帮助我们更好地设计系统架构和解决复杂问题。我在开发一个文件同步工具时就用类似的思路优化了冲突检测的效率。

相关新闻

基于Claude Code的多Agent路由与定义机制:从单体到协作的架构实践

基于Claude Code的多Agent路由与定义机制:从单体到协作的架构实践

1. 项目概述:从单体Agent到多Agent协作的跃迁最近在折腾一个基于Claude Code的AI项目,核心目标是把一个“聪明但孤独”的单体Agent,升级成一个能分工协作、高效运转的“多Agent团队”。这个想法源于一个很实际的痛点:面对一个复杂…

2026/8/10 20:50:20 阅读更多 →
Windows 10下Maven环境配置全攻略:从JDK到镜像优化

Windows 10下Maven环境配置全攻略:从JDK到镜像优化

1. 项目概述与环境准备最近在帮几个刚入行的朋友配置开发环境,发现很多人卡在了Maven的配置上。明明照着网上教程一步步来,最后mvn -v命令还是报错,要么是JAVA_HOME找不到,要么是命令不识别,折腾半天心态都崩了。其实&…

2026/8/11 6:53:49 阅读更多 →
SonarQube从零到一:Docker部署、核心配置与代码质量门禁实战

SonarQube从零到一:Docker部署、核心配置与代码质量门禁实战

1. 项目概述:为什么我们需要SonarQube?在代码的世界里,我们常常会遇到这样的场景:一个项目初期跑得飞快,但随着时间推移,新功能越加越多,代码库越来越臃肿,维护成本呈指数级上升。你…

2026/8/11 7:41:54 阅读更多 →

最新新闻

猴王出世:5分钟极速搭建全栈Web应用的轻量级脚手架

猴王出世:5分钟极速搭建全栈Web应用的轻量级脚手架

1. 这篇文章真正要解决的问题 当你在搜索引擎里输入“如何快速搭建一个Web项目”时,大概率会得到一堆关于Spring Boot、Vue、Django的教程。这些框架固然强大,但对于一个想快速验证想法、学习前后端交互、或者单纯想“玩点东西”的开发者来说&#xff0c…

2026/8/11 15:18:44 阅读更多 →
直流有刷电机驱动板设计:从H桥原理到PCB布局的完整指南

直流有刷电机驱动板设计:从H桥原理到PCB布局的完整指南

1. 这篇文章真正要解决的问题 如果你正在做一个机器人、智能小车或者需要精确控制旋转的设备,大概率会用到直流有刷电机。它结构简单、成本低、扭矩大,是嵌入式开发中最常见的执行器之一。但很多开发者,尤其是软件背景的同学,在项…

2026/8/11 15:18:44 阅读更多 →
NLP 模型评测与多任务性能对比:输出异常时走确定性的回退路径

NLP 模型评测与多任务性能对比:输出异常时走确定性的回退路径

NLP 模型评测与多任务性能对比:输出异常时走确定性的回退路径 1. 非标准 JSON:把模型输出视为不可信输入 模型输出可能带有 Markdown 包装、缺失字段或不完整结构。解析层应先限制输入大小并进行 Schema 校验;失败时使用确定性回退&#xff0…

2026/8/11 15:18:44 阅读更多 →
3步掌握智能麻将:开源Akagi的完整实战指南

3步掌握智能麻将:开源Akagi的完整实战指南

3步掌握智能麻将:开源Akagi的完整实战指南 【免费下载链接】Akagi 支持雀魂、天鳳、麻雀一番街、天月麻將,能夠使用自定義的AI模型實時分析對局並給出建議,內建Mortal AI作為示例。 Supports Majsoul, Tenhou, Riichi City, Amatsuki, with t…

2026/8/11 15:18:44 阅读更多 →
机器学习工程化与可复现实验流程设计:先收紧输入、状态与退出边界

机器学习工程化与可复现实验流程设计:先收紧输入、状态与退出边界

机器学习工程化与可复现实验流程设计:先收紧输入、状态与退出边界 实验从原型走向工程时,第一步是固定代码版本、数据切分、依赖和随机种子。若这些信息未被记录,即使某次指标变化也难以复查原因。 第一版不必先部署完整平台;先建…

2026/8/11 15:18:44 阅读更多 →
课题组超算上的module模块-只为方便自己查看

课题组超算上的module模块-只为方便自己查看

一、module命令 module purge module load XXX module unload XXX二、机群上的模块 华东四区山东 #华东四区山东 ------------------------- /work/home/ln2026/apprepo/modules -------------------------- lammps-22Jul2025-oneapi2024.0.1--------------------------- /p…

2026/8/11 15:17:44 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

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

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

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

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

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

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

2026/8/11 1:08:06 阅读更多 →
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/10 17:07:33 阅读更多 →