news 2026/4/20 22:47:41

二叉树--求最小深度(迭代和递归)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二叉树--求最小深度(迭代和递归)

使用了两种解法,递归法和迭代法。

两种方法的对比总结

  1. DFS (方法一minDepth):

    • 特点: 代码简洁,逻辑通过max巧妙处理了单链树的情况。

    • 缺点: 必须遍历完所有的分支才能确定谁最小。如果树严重左偏或右偏,栈深度较大。

  2. BFS (方法二levelOrder):

    • 特点: 利用队列层序遍历。

    • 优点:效率更高。因为它只要找到第一个叶子节点就直接return depth了,不需要像 DFS 那样把深处的节点也遍历一遍。在求“最短路径”或“最小深度”类问题时,BFS 通常是首选。

递归法

注意:如果左子树为空(left=0)或右子树为空(right=0),说明这不是叶子节点(最小深度要找到叶子节点),我们不能取 min(因为 min 会取到 0),必须取非空的那一侧(即 max)。

代码

// ========================================== // 方法一:递归法 (DFS - 后序遍历) // 核心思想:分别求左右子树深度,处理单支情况,最后取最小值 // ========================================== int minDepth(TreeNode* root) { if (root == NULL) return 0; // 终止条件 // 递归计算左右子树的深度 int left = minDepth(root->left); int right = minDepth(root->right); // 【关键逻辑】 // 如果左子树为空(left=0)或右子树为空(right=0),说明这不是叶子节点, // 我们不能取 min(因为 min 会取到 0),必须取非空的那一侧(即 max)。 // 例如:树 1->2,根节点 1 不是叶子,必须走 2 那边。 if (left == 0 || right == 0) { return max(left, right) + 1; } // 左右都不为空,说明是正常的左右分支,取最小的一边 + 根节点 1 return min(left, right) + 1; }

迭代法

使用层序遍历,一层一层往下找,一旦遇到第一个“叶子节点”,马上返回深度。

代码

// ========================================== // 方法二:迭代法 (BFS - 广度优先搜索) // 核心思想:一层一层往下找,一旦遇到第一个“叶子节点”,马上返回深度。 // 优点:对于求最小深度,这通常比 DFS 更快,因为它不需要遍历整棵树。 // ========================================== int minDepthBFS(TreeNode* root) { int depth = 0; queue<TreeNode*> q; if (root) q.push(root); while (!q.empty()) { int size = q.size(); // 记录当前层有多少个节点 depth++; // 开始处理新的一层,深度 +1 for (int i = 0; i < size; i++) { TreeNode* node = q.front(); q.pop(); // 【核心优化】 // 如果当前节点没有左孩子且没有右孩子,说明它是我们遇到的 // “层级最浅”的叶子节点。直接返回当前深度,无需继续遍历! if (node->left) q.push(node->left); if (node->right) q.push(node->right); if (!node->left && !node->right) return depth; // 找到最近的叶子,直接返回结果 } } return depth; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 3:47:01

flask python旅游景点印象服务系统

目录基于Flask的旅游景点印象服务系统摘要项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作基于Flask的旅游景点印象服务系统摘要 该系统采用Python的Flask框架开发&#xff0c;旨在为用户提供旅游景点的印…

作者头像 李华
网站建设 2026/4/18 18:12:26

基于大数据的农产品价格预测数据分析与可视化系统

目录摘要项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作摘要 该系统旨在利用大数据技术对农产品价格进行精准预测&#xff0c;并通过可视化手段直观展示分析结果&#xff0c;为农业生产者、经销商及政策制…

作者头像 李华
网站建设 2026/4/18 5:32:53

基于大数据的出行路线规划与推荐系统 数据分析可视化大屏系统

目录 大数据驱动的出行路线规划与推荐系统数据分析可视化大屏系统技术整合与创新 项目技术支持可定制开发之功能亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 大数据驱动的出行路线规划与推荐系统 该系统基于多源异构数据&#xff0…

作者头像 李华
网站建设 2026/4/18 18:37:53

Linux 文件描述符、端口、进程与线程数量上限分析

在高并发服务器开发中,系统资源限制往往成为性能瓶颈的"隐形杀手"。一个看似简单的 accept() 或 socket() 调用,可能因为触及系统限制而失败。理解 Linux 系统的关键资源上限,是构建高可用、高并发系统的前提。 本文将深入分析四个核心系统资源的理论与实际限制,…

作者头像 李华
网站建设 2026/4/18 23:20:21

Java基于SSM+JSP的某小区物业管理系统设计与实现

项目说明 随着社会的快速发展和城市化进程的加速&#xff0c;住宅小区作为人们生活的重要场所&#xff0c;其物业管理的重要性日益凸显。传统的小区物业管理方式已经无法满足现代社会的需求&#xff0c;因此&#xff0c;开发一个高效、智能的小区物业管理系统成为了一个必然的趋…

作者头像 李华