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

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

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

两种方法的对比总结

  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; }
http://www.jsqmd.com/news/290045/

相关文章:

  • 流批一体架构实践:如何用Flink统一数据处理流程
  • 高校教学AI辅助平台移动端架构:AI应用架构师的跨端适配方案
  • C#使用pythonnet简单示例
  • 校平机:让金属板材变平整的“整形医生“
  • python 环境问题 - 指南
  • 月薪从5K到13.2W,白帽子黑客到底有多赚钱?一文带你如何靠挖漏洞赚取海量收益_白帽子如何赚钱
  • 【网络安全】盘点八种攻击者常用的防火墙绕过方法_渗透测试怎么绕过防火墙
  • 什么是黑客?合法黑客和非法黑客的区别,零基础入门到精通(超详细),收藏这一篇就够了!
  • Java垃圾回收机制
  • 冬季氛围 SVG 交互组件及案例应用
  • ONENET API创建设备并返回设备密钥和设备ID
  • 导师严选2026 TOP10 AI论文平台:专科生毕业论文全场景测评
  • GITLAB Docker 容器化部署指南 - 指南
  • 详细介绍:【ComfyUI】Stable Zero123 单图生成3D视图
  • TB352FC原厂刷机包免费下载_CN_ZUI_16
  • npm 离线安装软件包指南(离线安装 claude code)
  • 导师推荐!MBA必看10个AI论文网站测评
  • 消费增值:让顾客回头的新商业密码
  • C++小项目: 通讯录管理系统
  • 为什么 loss 几乎没用:微调里最容易让人“自嗨”的指标
  • LoRA 不是“免费午餐”:你省下的算力,往往会在别的地方还回去
  • ABC242Ex Random Painting 题解
  • 2026年正规的防火卷帘门生产厂家与无机卷帘门品牌的优质选择
  • 大数据领域存算分离:云环境下的最佳实践
  • Flink与Elasticsearch集成:实时大数据搜索方案
  • uv vs pip:为什么现代Python包管理工具能快100倍?
  • 「LUCKY STUN穿透」使用webhook自动修改 qbittorrent 的监听端口
  • 大数据领域数据预处理:优化数据存储与管理的关键
  • android MQTT封装
  • 「LUCKY STUN穿透」使用邮件通知端口变化情况