首页 > 其他分享 >111. 二叉树的最小深度

111. 二叉树的最小深度

时间:2023-12-10 14:44:20浏览次数:29  
标签:None minDepth return self 最小 111 二叉树 root 节点

目录

题目

  • 给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:2

示例 2:

输入:root = [2,null,3,null,4,null,5,null,6]
输出:5

完美踩坑

  • 之前好几个题做过求树的高度,以为只需要把返回左右子树较大的一个改为返回左右子树较小的一个就可以了。
class Solution:
    def minDepth(self, root: Optional[TreeNode]) -> int:
        # 求树的高度
        if root is None:
            return 0
        return min(self.minDepth(root.left),self.minDepth(root.right))+1
  • 当遇到左/右子树空时,上面代码会返回1,把根节点认为是叶子节点,实际上返回的不是1而是不为空的子树那边的叶子节点到根节点的距离。

题解

  • 单独处理左/右子树为空的情况
class Solution:
    def minDepth(self, root: Optional[TreeNode]) -> int:
        # 空树
        if root is None:
            return 0
        #只有根节点
        if root.left is None and root.right is None:
            return 1
        #当只有左子树
        if root.left is None and root.right is not None:
            return self.minDepth(root.right)+1
        #当只有右子树
        if root.left is not None and root.right is None:
            return self.minDepth(root.left)+1
        #左右子树都有
        return min(self.minDepth(root.left),self.minDepth(root.right))+1

标签:None,minDepth,return,self,最小,111,二叉树,root,节点
From: https://www.cnblogs.com/lushuang55/p/17892635.html

相关文章

  • [LeetCode Hot 100] LeetCode155. 最小栈
    题目描述思路一:使用辅助栈定义一个[数据栈]来支持push、pop、top操作定义一个[辅助栈],其栈顶为当前的最小值,以支持常数时间复杂度的getMin操作思路二:使用ArrayDeque栈元素中除了保存当前值之外,额外保存当前最小值使用静态内部类方法一:对应思路一classMinStack{......
  • 【教3妹学编程-算法题】需要添加的硬币的最小数量
    3妹:2哥2哥,你有没有看到新闻,有人中了2.2亿彩票大奖!2哥 :看到了,2.2亿啊,一生一世也花不完。3妹:为啥我就中不了呢,不开心呀不开心。2哥 :得了吧,你又不买彩票,还是脚踏实地的好~3妹:小富靠勤,中富靠德,大富靠命,可能是我命不好。2哥 :哎,想我口袋只有几个硬币,叮咚作响。3妹:说到硬币,我......
  • 2023-12-09:用go语言,给你两个整数数组 arr1 和 arr2, 返回使 arr1 严格递增所需要的最小
    2023-12-09:用go语言,给你两个整数数组arr1和arr2,返回使arr1严格递增所需要的最小「操作」数(可能为0)。每一步「操作」中,你可以分别从arr1和arr2中各选出一个索引,分别为i和j,0<=i<arr1.length和0<=j<arr2.length,然后进行赋值运算arr1[i]=arr2[j]。如果......
  • 数据结构--二叉树的生成和遍历(9)
    好久没有更新博客了,关于二叉树也查了不少资料,下面写上我对二叉树的理解。一、什么是二叉树二叉树是一种树形结构,其中每个节点的叶子节点不超过两个,而且二叉树的左右子树是有顺序的,顺序不能颠倒如下图所示,一下四种都属于二叉树。  二、特殊的二叉树1.满二叉树:听名......
  • 【JavaSE】数据结构(树:二叉查找树、平衡二叉树、AVL树、红黑树)
    树度:每个节点的子节点数量树高:树的总层数根节点:入度为0的节点二叉树每个节点最多有两个子节点二叉查找树任意节点左子树上的节点都小于当前节点,右子树上的节点都大于当前节点平衡二叉树任意节点的左右子树的高度差不超过1AVL树AVL树是一种平衡二叉树,得名于其发明者的......
  • 110. 平衡二叉树
    目录题目自顶向下自顶向下正解自底向上(优)题目给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。自顶向下首先,对当前节点进行处理,计算左孩子的高度,右孩子的高度,两者高度差若大......
  • 最小费用组最大流——EK算法
    时间复杂度O(nm^2),理论上限//n,m,s,t,分别代表该网络的点数n,网络的边数m,源点编号s,汇点编号t。constintN=5010,M=100010,INF=1e8;intn,m,S,T;structedge{intv,c,w,ne;}e[M];inth[N],idx=1;//从2,3开始配对intd[N],mf[N],pre[N],vis[N];intflow,cost;voidadd(inta,......
  • 最小生成树
    假设\(n\)表示图中点数,\(m\)表示图中边数。Prim算法适用于稠密图,时间复杂度\(O(n^2)\)。核心思想:每次挑一条与当前集合相连的最短边。C++代码//st[i]表示点i是否在当前生成树集合中//dist[i]表示点i到当前集合的最短边的长度//g[i][j]表示点i和点j之间边的长度......
  • n个数算最小公倍数(优化版)
    #include<stdio.h>intret(intx,inty){  inti=1;  if(x%y==0||y%x==0)    return(x>y?x:y);  else  {   for(i=1;i<=x*y;i++)    {      i=x*i;      if(i%y==0) ......
  • 111
    importtimeclassMyQueue:definit(self,size=10):self._content=[]self._size=sizeself._current=0defsetSize(self,size):ifsize<size._current:foriinrange(size,self._current)[::-1]:delself._content[i]self._current=sizeself._size=sizedefput......