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

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

两种方法的对比总结

  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.mzph.cn/news/1206283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

流批一体架构实践:如何用Flink统一数据处理流程

流批一体架构实践&#xff1a;如何用Flink统一数据处理流程 关键词&#xff1a;流批一体、Apache Flink、数据处理、实时计算、离线分析 摘要&#xff1a;传统数据处理中&#xff0c;流处理&#xff08;实时&#xff09;与批处理&#xff08;离线&#xff09;像“两条并行的铁轨…

高校教学AI辅助平台移动端架构:AI应用架构师的跨端适配方案

好的,作为一名资深软件工程师和技术博主,我很乐意为你撰写这篇关于“高校教学AI辅助平台移动端架构”的技术博客文章,重点探讨跨端适配方案。 高校教学AI辅助平台移动端架构实践:AI应用架构师的跨端适配挑战与方案 副标题: 如何优雅地让AI教学能力在手机、平板上无缝奔跑…

C#使用pythonnet简单示例

1.nuget安装pythonnet2.编写python测试文件 example.py内容如下def HelloWorld():print("Hello world")class Calculator:def add(self,a:float,b:float)->float:return ab3.c#下测试Runtime.PythonDLL "C:\\Program Files\\Python312\\python312.dll"…

校平机:让金属板材变平整的“整形医生“

‍在机械制造、汽车生产、钢板加工等领域&#xff0c;我们常常能看到一种专门用于矫正金属板材平整度的设备——校平机。它就像是金属板材的"整形医生"&#xff0c;能够将弯曲、翘曲的板材变得平整如镜。一、什么是校平机&#xff1f;校平机&#xff08;也称为矫平机…

python 环境问题 - 指南

python 环境问题 - 指南2026-01-23 19:32 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; fon…

月薪从5K到13.2W,白帽子黑客到底有多赚钱?一文带你如何靠挖漏洞赚取海量收益_白帽子如何赚钱

近年来&#xff0c;由于技术发展和国家支持&#xff0c;信息安全行业正处于一个发展迅猛的时期。有越来越多有技术、有想法的白帽子参与到维护互联网安全的行动中去。 大数据时代&#xff0c;信息安全的使命更值得我们深思和探讨。 不掌握一门安全技术&#xff0c;不会 Web 攻…

【网络安全】盘点八种攻击者常用的防火墙绕过方法_渗透测试怎么绕过防火墙

防火墙在国内外安全产品市场中的占有率和使用率都名列前茅&#xff0c;根据相关机构研究结果显示&#xff0c;2021 年全球独立防火墙程序市场销售额达到数十亿美元&#xff0c;预计 2028 年将达到百亿美元以上。国内层面&#xff0c;防火墙产业在过去几年同样蓬勃发展&#xff…

什么是黑客?合法黑客和非法黑客的区别,零基础入门到精通(超详细),收藏这一篇就够了!

什么是黑客&#xff1f;合法黑客和非法黑客的区别 黑客&#xff08;Hacker&#xff09;是指对设计、编程和计算机科学方面具高度理解的人&#xff0c;包含了下列人物&#xff1a; “黑客”一词最早是用来称呼研究如何盗用电话系统的人&#xff0c;这一类人士也被称作“飞客”&…

冬季氛围 SVG 交互组件及案例应用

1. 全屏下雪E2编辑器招牌原创模板&#xff0c;矢量化特效高清丝滑&#xff0c;应用于《让梦想成真》《迪士尼奇幻冬日季 | 点亮你的冬日童话&#xff01;》《节日心愿单》等&#xff0c;可通过专属教程了解更多实现方式。2. 无限选择器由 科蚪大神发明并独家授权&#xff0c;以…

ONENET API创建设备并返回设备密钥和设备ID

一、基本信息 1.API鉴权了解 https://iot.10086.cn/doc/aiot/fuse/detail/1464 主要有三种 需要根据不同范围使用不同的 鉴权 2.新增设备API https://iot.10086.cn/doc/aiot/fuse/detail/1465 二、python 生成token 和时间戳自动创建设备 token目录下两个文件 config.js…

导师严选2026 TOP10 AI论文平台:专科生毕业论文全场景测评

导师严选2026 TOP10 AI论文平台&#xff1a;专科生毕业论文全场景测评 2026年AI论文平台测评&#xff1a;专科生毕业论文必备工具全解析 随着人工智能技术的不断进步&#xff0c;越来越多的专科生开始借助AI写作工具提升毕业论文的撰写效率。然而&#xff0c;面对市场上种类繁…

GITLAB Docker 容器化部署指南 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

详细介绍:【ComfyUI】Stable Zero123 单图生成3D视图

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

TB352FC原厂刷机包免费下载_CN_ZUI_16

原厂刷机包下载 https://pan.quark.cn/s/5cf2fdae58c2联想平板电脑 昭阳 K11原厂刷机包下载 转载请标注来源: 所有固件都是我手动上传的,不是机器人或程序,保持固件更新不是我的义务。如果你发现设备有系统更新,而…

npm 离线安装软件包指南(离线安装 claude code)

本文以离线安装 anthropic-ai/claude-code&#xff08;Claude Code 客户端&#xff09;和 musistudio/claude-code-router&#xff08;Claude Code Router&#xff09;为例&#xff0c;介绍如何通过 npm 原生命令实现离线全局安装。该方法适用于任何 npm 包的离线安装场景。 流…

导师推荐!MBA必看10个AI论文网站测评

导师推荐&#xff01;MBA必看10个AI论文网站测评 2026年MBA学术写作工具测评&#xff1a;为什么你需要这份指南 随着人工智能技术在学术领域的广泛应用&#xff0c;AI论文网站已成为MBA学生和研究者不可或缺的辅助工具。然而&#xff0c;面对市场上五花八门的平台&#xff0c;如…

消费增值:让顾客回头的新商业密码

做生意的人都明白一个道理&#xff1a;吸引新顾客的成本&#xff0c;是留住老顾客的5倍。但问题是&#xff0c;怎么才能让顾客真正留下来&#xff0c;而且愿意持续消费&#xff1f; 今天我要介绍的消费增值模式&#xff0c;可能就是你一直在寻找的答案。 一、市场痛点&#x…

C++小项目: 通讯录管理系统

#include <iostream> #include <string> using namespace std; const int MAX=1000;//联系人结构体 struct Person{string name;int gender;int age;int phoneNum;string address; }; //通讯录结构体 stru…

为什么 loss 几乎没用:微调里最容易让人“自嗨”的指标

loss 在微调里不是没用,而是作用范围被严重高估了。它能告诉你“训练有没有在跑”,却几乎无法告诉你“模型有没有变成你想要的样子”。如果你把 loss 当成主要决策依据,那你很可能会在一条看起来很平滑的曲线上,慢…

LoRA 不是“免费午餐”:你省下的算力,往往会在别的地方还回去

LoRA 确实解决了很多现实问题,这一点没有任何争议。但问题在于,LoRA 被过度神话了。很多人把它当成了一种“几乎没有代价的微调方式”,仿佛只要挂上 LoRA,就能放心大胆地训练。而真实工程里,LoRA 带来的,从来不是…