【每日力扣Leetcode】111-计算一个二叉树的最小深度

8、内存交织技术详解 本文详细解析了内存交织技术的基本原理、工作机制及实现方式,探讨了其在提升内存访问速度和系统性能中的关键作用。文章还分析了内存交织的优缺点、实际应用场景以及与其他优化技术的结合应用,并提出了未来发展的可能方向,为理解与运用该技术提供了全面参考。 阅读详情

力扣题库111,计算一个二叉树的最小深度。

题目链接点这里。

题目描述

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明: 叶子节点是指没有子节点的节点。

示例:

给定二叉树 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回它的最小深度 2.

解题思路

本题思路比较简单,利用DFS,迭代从下至上深度依次加1即可。

要注意的是类似于题目110,为了提升效率,当某一层一支出现叶子节点的时候即使该节点另外一支还可以继续往下也不需要再计算,可以提前进行阻断返回。

初始答案

按照上述思路答案如下

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def minDepth(self, root: TreeNode) -> int:
        def isLeaf(node: TreeNode) -> bool:
            if not node.left and not node.right:
                return True
            else: 
                return False
        if not root:
            return 0
        elif isLeaf(root):
            return 1
        elif root.left and isLeaf(root.left) or root.right and isLeaf(root.right):
            return 2
        else:
            leftDepth = self.minDepth(root.left)
            rightDepth = self.minDepth(root.right)
            if leftDepth == 0:
                return rightDepth + 1
            elif rightDepth == 0:
                return leftDepth + 1
            else:
                return min(leftDepth,rightDepth) + 1

这里定义了一个判断叶子节点的临时函数isLeaf()。

主要的难点就是需要考虑的特殊情况比较多:

首先如果传递的root不存在,返回0;

如果传递的root存在且为叶节点时返回1;

如果左右子节点有至少一个叶子节点时,就不再继续往下计算,直接返回2;因为isLeaf()中没有判断root是否存在,所以这里要额外进行一次判断。

python中的逻辑运算顺序为not>and>or

最后是左右子节点至少存在一个并且不是叶子节点的情况,如果只有一个子节点,沿着该子节点往下计算,如果两个子节点都存在,两个都计算并用更小的深度加上1进行返回。

因为多种情况没有考虑完全,所以提交了很多次。不过因为进行了提前阻断返回,所以虽然最坏时候的时间复杂度为O(N),但实际表现是很好的,执行用时52ms,击败了88%的提交。

改进答案

官方答案还给出了基于BFS的计算思路。

DFS处理思路是递归,而BFS的处理思路是基于临时队列。放入队列的时候,除了放节点元素,还要将节点元素对应的深度也一起放进去,当队列中第一次出现叶子节点时直接返回深度即可。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def minDepth(self, root: TreeNode) -> int:
        temp = []
        if not root:
            return 0
        else:
            temp.append((root,1))
        while temp:
            node,depth = temp.pop(0)
            if not node.left and not node.right:
                return depth
            if node.left:
                temp.append((node.left,depth+1))
            if node.right:
                temp.append((node.right,depth+1))

确实比DFS的代码要简洁,思路也更简单易懂一点。

因为也是在第一时间进行提前返回,所以虽然时间复杂度也是O(N),该提交和DFS一样也是击败了88%的提交。

注意事项

进行了多次提交主要是因为DFS的多种条件考虑不严谨导致,同时像这种从上至下计算并且可以提前返回的情况用BFS会更好一点。

我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。

jdk-8u144-linux-x64.tar.gz. 该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包 立即下载

相关推荐

FFmpeg视频缩放终极指南:从基础命令到保持宽高比的5种实战技巧

本文是FFmpeg视频缩放的终极指南,详细讲解了从基础命令到保持宽高比的5种实战技巧。针对不同平台(如抖音、B站、Instagram)的分辨率要求,提供了具体的参数模板和批量处理脚本,帮助内容创作者高效、精准地调整视频大小,避免画面变形或黑边问题,实现多平台适配。

juice的博客 457

【每日一题】力扣111 二叉树的最小深度

文章目录题目解题思路代码(C++)迭代递归拓展(求最大深度)总结 题目 题目链接:力扣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] 内 -100

倾心之作 1550

内核工作FAST‘25 Artifact Evaluation流程记录

在我们的paper中,复现需要用到傲腾持久化内存,因此,需要AE Reviewer访问到内网服务器中。我们的思路是购买云服务器,将其作为跳板机,内网服务器通过SSH反向代理与公网服务器建立隧道,AE Reviewer通过隧道访问内网服务器。我们在AE过程中使用。然后,把一切复现需要的代码环境,在chroot里面配置完成。

不定期更新系统使用、编程小技巧,哔哩哔哩账号:https://space.bilibili.com/399455629,欢迎关注 1214

二叉树的最小深度

二叉树的最小深度 题目: 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 输入:root = [3,9,20,null,null,15,7] 输出:2 示例 2: 输入:root = [2,null,3,null,4,null,5,null,6] 输出:5 解题思路:用BFS解决 /** * Definition for a binary tree node. * public class TreeNode { *

KobeSacre的博客 1233

从零开始:在Unity中使用Dynamic Bone实现角色骨骼自然抖动(以女性角色胸部为例)

本文详细介绍了在Unity中使用Dynamic Bone插件实现角色骨骼自然抖动的完整流程,特别以女性角色胸部为例。从插件导入、骨骼系统基础到Dynamic Bone组件配置和参数调优,提供了全面的技术指导。文章还包含性能优化技巧和常见问题解决方案,帮助开发者快速掌握这一物理效果实现方法。

weixin_28728495的博客 453

Zemax新手别慌!一文搞懂几何像差:从球差、慧差到色差的实战识别与优化

本文为Zemax新手提供几何像差实战指南,详细解析球差、彗差和色差的识别与优化方法。通过软件操作关键节点和实际项目决策逻辑,帮助光学设计师快速掌握像差诊断与优化技巧,提升光学设计效率。

weixin_42524708的博客 257

EasyUI Tree(树)isLeaf 叶子节点和顶级节点过滤

在生成功能树后,我们可以选择对所拥有的模块进行追加子节点,如果选中节点已拥有path,当追加子节点后就会变为叶子节点(文件夹形式),那么怎样设置叶子节点可以点击呢?可以使用$(this).tree('getParent', node.target) 进行顶级节点过滤 树控件数据格式化 每个节点都具备以下属性: id:节点ID,对加载远程数据很重要。 text:显示节点文本。 ...

程序和我有一个能跑就行了 5412

DSP28335学习笔记——McBSP配置为SPI

由于28335硬件外设上只有一个SPI接口,所以当SPI接口不够用时,可以将McBSP配置为SPI接口。 参考28335的数据手册,当DSP为主机时,配置McBSP为SPI所用到的接线如下图所示。 另外总结一些调试过程中的经验。 1.传输数据位数的确定 由RCR1寄存器中的RWDLEN1和XCR1寄存器中的XWDLEN1决定。分别对应着接受和发送的位数,在配置成SPI模式的时候,这

捕虫少年 1万+

【vue+vue-treeselect】根据指定字段,如isLeaf(是否末级节点),设置只允许末级节点可以选

(2)获取数据源的时候,设置下禁用判断,vue-treeselect的禁用是isDisabled属性。(1) :flat="true"一定要设置。(3)isLeaf有值就要禁用。

花椒和蕊的博客 804

QGis二次开发 —— 5、基于qgis开发多种在线地图预览,并加入经纬度坐标显示等(附:源码)

QGis二次开发 —— 5、基于qgis开发多种在线地图预览,并加入经纬度坐标显示等(附:源码

368

uboot引导vxworks6.9(T4240) 启动

vxworks内核配置下搜索RAM_LOW_ADRS, 值为0x01000000, 是vxworks下载启动的地址,uboot启动时会用到。vxworks6.9 t4240用的是32地址空间,uboot下用的是64位地址空间,去uboot下修改law物理地址空间为32位。vxworks下flash基地址为 0xff000000, 将vx下的地址修改为0xe0000000,和uboot下地址一致。uboot下flash基地址为0xe000000,vxworks内核配置为build-in 符号表。

珂珂可爱多 3234

el-tree的使用总结

vue项目中el-tree的基本使用总结

m0_58191077的博客 4275

如何绘制电气绝缘图(GB9706.1-2007和GB9706.1-2020差异)

是用来描述要考虑设备的绝缘状况和它们的值 ,从而便于和相关部门交流和沟通,如权威机构和检测实验室等。本文为绝缘图的实例, 包括所有相关的绝缘路径以及介电强度,爬电距离和电气间隙的值。

学海无涯的专栏 1万+

跟着专注于计算机视觉的AndyJ的妈妈我学算法之每日一题leetcode111二叉树的最小深度

Tags tree | depth-first-search | breadth-first-search 这个题,二叉树的最小深度,也是BFS的经典题,是道容易题,要把情况考虑清楚。 这个题可以用BFS,也可以用DFS。都用来做一下,挺不错。 好了, 题目: 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 2

AndyJ的学习放弃之旅 244

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

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

LeetCode-111. 二叉树的最小深度(java)

金三银四,又到了刷题月。有时间的话,希望大家还是尽量刷起来咯。帮助往往不是直接体现出来的,但会让你对很多东西的底层实现了解的更深刻。

**My Coding Family** 1185

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

每日一题:Leetcode-111 二叉树的最小深度

力扣题目解题思路java代码。

LIUCHANGSHUO的博客 589

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

【leetcode】111.二叉树的最小深度题目思路代码 做这道题目前,可以先做一下【leetcode】104.二叉树的最大深度 题目 leetcode原题链接 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 **说明:**叶子节点是指没有子节点的节点。 示例 1: 输入:root = [3,9,20,null,null,15,7] 输出:2 示例 2: 输入:root = [2,null,3,null,4,null,5,null,6] 输出:5

laplacepoisson的博客 193

LeetCode力扣题目111:多种算法对比实现二叉树的最小深度

它通过迭代方式检查每一层的节点,直到找到第一个叶子节点,然后立即返回这个叶子节点的深度。这个方法的主要优点是它不必检查所有的节点,尤其是在一个高度不平衡的树中,它可以更快地找到最浅的叶子节点。通过这种改进,BFS 方法更加高效和直观,尤其是在处理大型数据集时,这种方法能快速找到最小深度,而无需深入遍历树的所有部分。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。注意:叶子节点是指没有子节点的节点。这些方法在需要快速确定数据结构(如游戏、网络路由、社交网络的层级结构)中的最小路径或深度时非常有用。

10年数据\经营分析经验,现任大厂数据分析负责人 634

力扣刷题记录

Leecode

Mr_Liuss的博客 2636

【每日一题-leetcode】111.二叉树的最小深度

111.二叉树的最小深度 二叉树的最小深度 难度简单244 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最小深度 2. //分治 public...

芝兰生于深谷,不以无人而不芳 567

每日一题-——LeetCode(111)二叉树的最小深度

题目描述: 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 思路一: 把每一层的结点加入到队列,每一层i+1,到下一层时,把上一层在队列中的结点都弹出,按从左到右把下一层的结点逐个加入,如果首次遇到一个结点没有左子结点与右子节点,则返回i class Solution(object): def minDepth1(sel...

bamanluan1077的博客 227

( “树” 之 DFS) 111. 二叉树的最小深度 ——【Leetcode每日一题】

111. 二叉树的最小深度 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 **说明:**叶子节点是指没有子节点的节点。

weixin_43412762的博客 569

LeetCode-111-二叉树的最小深度

二叉树的最小深度 题目描述:给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 示例说明请见LeetCode官网。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/minimum-depth-of-binary-tree/ 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解法一:递归 首先,如果root为null,直接返回0。 否则,调用递归方法m

玉树临风,仙风道骨 181

leetcode每日一题-111. 二叉树的最小深度

leetcode每日一题,去了解算法本身的魅力

qq_40500099的博客 469

(每日一练C++)111. 二叉树的最小深度

111. 二叉树的最小深度 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。 示例 1: 输入:root = [3,9,20,null,null,15,7] 输出:2 示例 2: 输入:root = [2,null,3,null,4,null,5,null,6] 输出:5 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/minimum-depth-of-

weixin_39827856的博客 260

Leetcode各种题型题目+思路+代码(共176道题及答案)

文章目录 第一章:Leetcode 每日很多题 1、Leetcode-1047 删除字符串中的所有相邻重复项 2、剑指 Offer 53 - I. 在排序数组中查找数字 I 3、Leetcode704:二分查找 4、 Leetcode 227:基本计算器II 5、leetcode 224:基本计算器(带括号的计算) 6、Leetcode 15:三数之和:排序+双指针 7、剑指 offer 38.字符串的排列 8、Leetcode409:最长回文串 9、Leetcode 331:验证二叉树的前序序列化 10、

muli522的博客 4万+
上一篇: 网址url中的百分号是什么编码以及如何用python实现url编码
下一篇: 【每日力扣Leetcode】459-判断一个字符串是否由子字符串重复组成
T型人小付
博客等级 码龄7年 433粉丝 210原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值