【重点】【DFS】111. 二叉树的最小深度

LeetCode111——二叉树最小深度c++多方法详解 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 既然提到了深度的问题那就不得不先提到最大深度的获取,这道题在leetcode上面也有,不过大家就按字... 阅读详情

题目

问:本题和 104. 二叉树的最大深度 的区别是什么?为什么本题代码要更复杂一些?
答:对于非叶节点,把握一个共同原则:如果一个儿子是空节点,另一个儿子不是空节点,那么答案只能来自非空的那一侧。
求最大深度,空节点返回 0,直接计算 max,一定会取到有节点的那一侧(因为深度比 0 大)。
求最小深度,空节点返回 0,直接计算 min,会取到空节点,不符合「答案只能来自非空的那一侧」。所以求最小深度必须多写一些逻辑。

Python

参考:灵茶山艾府

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def minDepth(self, root: Optional[TreeNode]) -> int:
        if not root:
            return 0
        elif not root.left and not root.right: # 这个判断分支不加也可以,其他分支可覆盖
            return 1
        elif not root.right:
            return 1 + self.minDepth(root.left)
        elif not root.left:
            return 1 + self.minDepth(root.right)
        else:
            return 1 + min(self.minDepth(root.left), self.minDepth(root.right))
        

Java

法1:BFS

class Solution {
    public int minDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        int depth = 1;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while (!queue.isEmpty()) {
            int curSize = queue.size();
            for (int i = 0; i < curSize; ++i) { // 上面记录curSize配合内部for循环的操作很棒!!!
                TreeNode topNode = queue.poll();
                if (topNode.left == null && topNode.right == null) {
                    return depth;
                }
                if (topNode.left != null) {
                    queue.offer(topNode.left);
                }
                if (topNode.right != null) {
                    queue.offer(topNode.right);
                }
            }
            ++depth;
        }

        return depth;
    }
}

法2:DFS

class Solution {
    public int minDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        if (root.left == null && root.right == null) {
            return 1;
        } else if (root.left == null) {
            return 1 + minDepth(root.right);
        } else if (root.right == null) {
            return 1 + minDepth(root.left);
        } else {
            return Math.min(1 + minDepth(root.left), 1 + minDepth(root.right));
        }
    }
}
【推荐100个unity插件】将UE的资源导出到unity使用—— Exporter for Unreal to/for Unity插件 Unreal to Unity导出器是一款帮助开发者将Unreal Engine项目转换为Unity的工具。文章详细介绍了使用步骤:1)安装虚幻引擎并创建项目;2)在Plugins文件夹中安装导出插件;3)导入UE资产到Content文件夹;4)配置导出参数并完成转换。文末推荐了多个Unity开发专栏,涵盖C#编程、2D/3D开发、特效制作等内容。作者向宇提供了博客地址,欢迎读者交流学习。该工具能有效提升项目迁移效率,适合需要跨引擎开发的用户使用。 阅读详情

相关推荐

四阶龙格库塔法求解一次常微分方程组(python实现)

之前在博客发布了关于使用四阶龙格库塔方法求解一次常微分方程组的文章,由于代码缺少具体的验证,部分朋友可能存在疑问,因此这里打算再重新写一篇博客来验证一下程序的正确性,另外,这里是使用python语言来实现的。

HelloWorldTM的博客 8542

LeetCode:111. 二叉树的最小深度

本文介绍了使用深度优先搜索(DFS)递归方法求解二叉树最小深度的算法。通过递归遍历二叉树,在遇到叶子节点时比较当前深度与全局最小深度,更新最小值。文章提供了基础实现代码,并进一步优化加入"最优性剪枝"策略:当当前深度超过已知最小深度时提前终止递归,提高效率。关键点包括:初始化全局最小深度为最大值、递归传递当前深度、在叶子节点更新最小值、空节点处理等。优化后的算法减少了不必要的递归调用,提升了性能。

2303_80876582的博客 41

峰岹FU6832L双核电机控制芯片实战:从FOC算法到BLDC/PMSM驱动开发

在嵌入式系统和电机控制领域,磁场定向控制(FOC)是实现无刷直流电机(BLDC)和永磁同步电机(PMSM)高效、平稳运行的核心算法。其原理是通过坐标变换将三相交流量分解为直流量,实现类似直流电机的转矩与磁场解耦控制,从而提升效率、降低噪音与振动。这项技术的工程价值在于能以更低的处理器开销实现高性能驱动,广泛应用于消费电子、工业自动化与智能家电。本文以峰岹FU6832L芯片为例,深入解析其独特的双核架构——将实时性要求极高的FOC运算交由专用硬件引擎处理,解放主控CPU处理应用逻辑,并结合PID参数整定、电流

weixin_29570795的博客 512

LeetCode 111. Minimum Depth of Binary Tree 题解

本题是二叉树的经典问题,主要考察对二叉树遍历的理解和应用。通过使用广度优先搜索或深度优先搜索,我们可以高效地计算二叉树的最小深度。广度优先搜索的核心思想是:按层遍历二叉树,当遇到第一个叶子节点时,返回当前层数。深度优先搜索的核心思想是:递归地计算左子树和右子树的最小深度,返回较小值 + 1。在实际应用中,广度优先搜索通常更受欢迎,因为它可以在找到第一个叶子节点时立即返回,而不需要遍历整个二叉树。这种方法不仅适用于二叉树的最小深度问题,还可以应用于许多其他需要计算二叉树深度的场景。

cannonjinx的博客 1003

WSL 相关命令时遇到了 “无法从raw.githubusercontent.com提取分发列表、操作超时

核心问题:国内网络屏蔽raw.githubusercontent.com,导致WSL无法获取发行版列表;最优方案:优先用方案1(手动指定发行版安装),无需改配置,1分钟搞定;永久修复:用方案2(修改hosts),适合需要管理多个WSL发行版的场景;兜底方案:用方案3(手动下载安装包),适配所有网络环境。按以上步骤操作后,你不仅能正常安装WSL,等命令也能正常执行,后续可正常使用WSL搭配Docker Desktop(如切换WSL 2后端),无需再担心网络超时问题。

weixin_39766667的博客 2129

手把手教你搭建硬件在回路(HIL)仿真系统:从Simulink建模到实时测试

本文详细介绍了如何从零开始搭建硬件在回路(HIL)仿真系统,涵盖Simulink建模、实时仿真、代码生成及调试等关键步骤。通过具体配置示例和优化技巧,帮助开发者解决复杂控制系统验证中的技术难题,提升半实物仿真的效率和可靠性。

weixin_30952535的博客 445

leetcode111. 二叉树的最小深度(java)

在这个题里使用BFS 比 DFS 的优势就在于最小深度,我们不需要遍历所有节点,计算出左右子树的深度,我们只要到最小深度结束时,停止就可以知道最小的深度了,时间复杂度会低很多.从根节点看,没有右树.这种情况下最小深度就是左树的深度4,因此代码里要对,没有左树和没有右树的情况做下判断.输入:root = [2,null,3,null,4,null,5,null,6]输入:root = [3,9,20,null,null,15,7]最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

SP_1024的博客 843

面向多目标跟踪的数据关联方法研究综述

摘要:多目标跟踪技术在军事和民用领域具有广泛应用,其核心挑战在于数据关联问题。本文系统梳理了数据关联的主要解决方法,首次将经典算法分为确定性关联和概率性关联两大类。确定性关联(如NNDA、GNN、MHT)采用"硬分配"策略,计算效率高但易受噪声干扰;概率性关联(如PDA、JPDA、PMHT)通过"软分配"处理不确定性,更适合复杂场景。文章详细分析了各类算法的原理、适用条件和优缺点,并探讨了智能学习等新兴技术在视觉跟踪等领域的应用。研究指出,尽管随机集滤波等新方法出现,

qq_43416206的博客 1139

BFS解题框架

BFS(Breath First Search,广度优先算法)和DFS(Depth First Search,深度优先算法)是非常常用的两种算法,其中DFS通常被认为是“回溯算法”。 BFS相对DFS的最大区别是:BFS找到的路径一定是最短的,但代价是空间复杂度比DFS大很多。 BFS的核心思想:把一个问题抽象成图,从一个点开始,向四周扩散。通常BFS算法都是需要“队列”这种数据结构,把一个点周围的点加入这个队列。 算法框架 int BFS(Node start, Node end) { Queue

三明治文鱼的博客 169

r语言svr模型_R语言初探强化学习中的马尔可夫模型

强化学习大家这几年应该不陌生,从AlphaGo到AlphaZero让大家见识到了强化学习的力量。我们今天给大家介绍一个在强化学习中核心思维马尔可夫决策过程(MDP)。马尔科夫决策过程是基于马尔科夫论的随机动态系统的最优决策过程。它是马尔科夫过程与确定性的动态规划相结合的产物,故又称马尔科夫型随机动态规划,属于运筹学中数学规划的一个分支。今天我们给大家介绍下马尔可夫决策过程中用到一些算法以...

weixin_28994357的博客 1111

实战对比:VINS和ORBSLAM3在无人机避障中的表现(含实测数据)

本文通过实战测试,深度对比了VINS和ORBSLAM3两种主流视觉SLAM算法在无人机避障中的表现。测试聚焦于光照变化、动态遮挡和快速运动三大挑战,提供了详细的实测数据与性能分析。结果表明,VINS在计算效率和实时性上占优,而ORBSLAM3在定位精度和地图管理方面更稳健,为不同应用场景下的工程选型提供了清晰依据。

醉三国 627

力扣(LeetCode) 111: 二叉树的最小深度 - 解法思路

给定一棵二叉树,找到它的最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。最小深度用 BFS 最快:层序遍历遇到的第一个叶子就是答案。DFS 也可以,但无法像 BFS 那样早停。

Yao H. Wang's Blog 282

RK3568 OpenHarmony3.2 蓝牙模块AP6275S适配(已更新)

OpenHarmony3.2 Release版默认是适配AP6275s这款蓝牙芯片的,但是打开蓝牙,发现无法扫描到设备、连接设备。目前平台soc为RK3568,根据项目要求,自定义外设。接下来将以解决bug为目的,学习和记录OpenHarmony平台下蓝牙模块的适配流程。RK809 CLK:32.768KHzUART1M1:与蓝牙模块通讯的串口:GPIO4_B6:GPIO4_A5WAKE_GPIO:未定义,硬件拉高1.8V: 未定义,悬空主要是打开串口,/dev/ttyS1,得到文件描述符fd。

Martian_Jonas的博客 2245

LeetCode 111. 二叉树的最小深度:深度优先搜索与广度优先搜索的应用

二叉树的最小深度问题是树算法中的经典问题,掌握它不仅有助于解决相关的LeetCode问题,也能帮助我们更好地理解深度优先搜索和广度优先搜索的思想。希望这篇文章对大家有所帮助,祝大家刷题愉快!

cannonjinx的博客 4026

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

代码随想录算法训练营-Day13

递归是利用系统帮我们维护的栈,迭代则自己new Stack。需要额外记忆的题目:二叉树的最大深度、二叉树的最小深度。二叉树的迭代遍历,参考上述的BFS的空指针标记法模板。实现方式:递归法、迭代法(着重记忆空指针标记法)针对DFS,无论是使用递归还是迭代,本质上是利用。二叉树的递归遍历,参考上述的DFS的前中后序模板。DFS 的三种遍历规则:前序、中序、后续遍历。二叉树的层序遍历,参考上述的层序遍历模板。主要从二叉树的遍历方式区分。,所以是new Queue。

boymeetsevil的博客 429

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

111. 二叉树的最小深度

这道题我用的是前序遍历。主函数进入递归和判空就可以了。递归先判断当前节点是否为空,为空的话直接返回。注意:这里不能直接更新最小深度,因为如果上一个节点只有一个子节点,它不是叶子节点,但空的子节点会进入这个分支导致更新最小深度。接下来才是更新最小深度,在当前节点的左子节点为空右子节点也为空时,才更新最小深度。最后递归遍历左右子树。完成遍历后返回最小深度mi。

Zhying023的博客 225

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

算法---LeetCode 111. 二叉树的最小深度

给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例 1:输入:root = [3,9,20,null,null,15,7]输出:2示例 2:输入:root = [2,null,3,null,4,null,5,null,6]输出:5提示:树中节点数的范围在 [0, 105] 内。

知北行的博客 246

LeetCode 111-120 题详解

​:给定一个二叉树,填充它的每个 next 指针,让这个指针指向其下一个右侧节点。​:给你二叉树的根节点 root 和一个整数目标和 targetSum,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。状态转移方程:dp[i][j] = min(dp[i+1][j], dp[i+1][j+1]) + triangle[i][j]如果s[i-1] == t[j-1],则dp[i][j] = dp[i-1][j-1] + dp[i-1][j]dp[i][j]表示从位置(i,j)到底部的最小路径和。

fengruxue的专栏 697

代码随想录算法训练营第十四天|226、翻转二叉树 101、对称二叉树 104、二叉树的最大深度 111、二叉树的最小深度

本文总结了二叉树相关算法题的解题思路,包括翻转二叉树、对称二叉树、最大深度和最小深度的计算方法。翻转二叉树可通过递归或迭代方式交换左右子树实现;判断对称二叉树可比较左右子树是否镜像对称;计算最大深度可采用层序遍历或后序遍历递归;最小深度则需注意处理单边子树为空的情况,使用层序遍历或递归实现。文中提供了Python代码示例,展示了不同方法的实现细节和适用场景。

SchrysanthemumS的博客 43

Leetcode二叉树Part02 | 226.翻转二叉树、101.对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度

以下笔记是我在学习代码随想录的思路和解题过程中自己的总结和思考,可能会有误。

Smart_goose的博客 231

二叉树相关习题复习2020/1/18

习题均来自LeetCode 这里写目录标题习题均来自LeetCode(1)相同的树 题号--100(2)对称二叉树 题号--101(3)二叉树的最大深度 题号--104(4)二叉树的层序遍历 题号--107(5)二叉树的最小深度 题号--111总结: 中难题我唯唯诺诺简单题我重拳出击嘻嘻 (1)相同的树 题号–100 这一题十分简单没啥好说的 就简单的递归遍历判断每个结点是否相同(下图:耗时+消耗内存) /** * Definition for a binary tree node.

天上有好多星星 237

代码训练营 D13:226. 翻转二叉树|101. 对称二叉树|104. 二叉树的最大深度|111. 二叉树的最小深度

本文介绍了二叉树相关的四个算法问题:1)226题翻转二叉树,通过递归交换左右子树实现;2)101题判断对称二叉树,递归比较左右子树镜像;3)104题求最大深度,递归计算左右子树深度取最大值;4)111题求最小深度,需注意必须到达叶子节点才结束递归。每个问题都给出了对应的C++代码实现,其中翻转和对称二叉树采用前序遍历,深度问题采用后序遍历。关键点在于理解递归终止条件和二叉树遍历顺序。

victordefoe的博客 218

力扣刷题——111.二叉树的最小深度

给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例 1:输入:root = [3,9,20,null,null,15,7]输出:2示例 2:输入:root = [2,null,3,null,4,null,5,null,6]输出:5提示:树中节点数的范围在 [0, 105] 内。

m0_74317430的博客 63

day 7 111-115

题106题107题108题109题110翻译单词。

qq_42775632的博客 30

代码随想录算法训练营第14天|力扣226,101,104,111

总结:后序遍历,深度从最底开始往上+1,然后去左右子树的最小深度即可。总结:前序遍历,主要是要想清楚对称的几个判断条件。总结:中序遍历,互换左右子树即可。104求二叉树的最大深度。总结:这个就没啥好说的了。101求二叉树的最小深度。

clancy_duck的博客 32

【LeetCode】111. 二叉树的最小深度

本文探讨了二叉树最小深度的计算问题。关键点在于区分最小深度与最大深度的定义差异,特别是当树只有一侧子树时的处理方式。文章提出了两种主要解法:递归DFS和迭代BFS。递归DFS通过分情况处理空子树和叶子节点,确保正确计算路径长度;迭代BFS则利用队列实现层序遍历,找到第一个叶子节点即返回当前深度。两种方法时间复杂度均为O(n),但空间复杂度不同(递归O(h),BFS O(w))。文中还分析了典型边界情况,并强调必须到达真实叶子节点而非仅中间节点的注意事项。优化后的递归DFS代码简洁高效,是推荐解法。

qq_32019341的博客 1007
上一篇: 【重点】【二分查找】287.寻找重复数
下一篇: 【二叉树】【DFS】104.二叉树的最大深度
Allenlzcoder
博客等级 码龄10年 925粉丝 512原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值