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

LeetCode 111. 二叉树的最小深度

时间:2023-05-16 15:22:43浏览次数:47  
标签:node return nil queue 111 二叉树 深度 root LeetCode

题目链接:LeetCode 111. 二叉树的最小深度

题意:

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

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

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

解题思路:

1.递归法

与求最大深度类似,采用先序或者后序都是可以的,但是这里要注意一个问题:
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。是到叶子节点,
同时,不能直接照搬求最大深度的代码,

int leftDepth = getDepth(node->left);
int rightDepth = getDepth(node->right);
int result = 1 + min(leftDepth, rightDepth);
return result;

如果这么求的话,没有左孩子的分支会算为最短深度。(这样是不正确的)

所以,如果左子树为空,右子树不为空,说明最小深度是 1 + 右子树的深度。

反之,右子树为空,左子树不为空,最小深度是 1 + 左子树的深度。 最后如果左右子树都不为空,返回左右子树深度最小值 + 1 。

递归代码如下:

func minDepth(root *TreeNode) int {
    if root == nil {
        return 0
    }
    left :=minDepth(root.Left)
    right := minDepth(root.Right)
    
    if  root.Left == nil && root.Right != nil { 
        return 1 + right;
    }
    if root.Left != nil  && root.Right == nil  { 
        return 1 + left;
    }
    return 1 + min(left,right)
}
func min(a,b int) int{
    if a < b{
        return a
    } 
    return b
}

2.迭代法:

对于迭代法,依然是层序遍历,
需要注意的是,只有当左右孩子都为空的时候,才说明遍历到最低点了。如果其中一个孩子不为空则不是最低点

迭代代码如下:

func minDepth(root *TreeNode) int {
    if root == nil {
        return 0
    }
    var dep int
    var queue []*TreeNode
    queue = append(queue, root)
    for l := len(queue); l > 0; {
        dep++;
        for ; l > 0; l-- {
            node := queue[0]
            queue = queue[1:]
            if node.Left == nil && node.Right == nil {
                return dep
            }
            if node.Left != nil {
                queue = append(queue, node.Left)
            }
            if node.Right != nil {
                queue = append(queue, node.Right)
            }
            
        }
        l = len(queue)
    } 
    return dep
}

标签:node,return,nil,queue,111,二叉树,深度,root,LeetCode
From: https://www.cnblogs.com/lxing-go/p/17405727.html

相关文章

  • [LeetCode] 1343. Number of Sub-arrays of Size K and Average Greater than or Equa
    Givenanarrayofintegers arr andtwointegers k and threshold,return *thenumberofsub-arraysofsize k andaveragegreaterthanorequalto *threshold.Example1:Input:arr=[2,2,2,2,5,5,5,8],k=3,threshold=4Output:3Explanation:Sub-a......
  • 图解LeetCode——234. 回文链表
    一、题目给你一个单链表的头节点head,请你判断该链表是否为回文链表。如果是,返回true;否则,返回false。二、示例2.1>示例1:【输入】head=[1,2,2,1]【输出】true2.2>示例2:【输入】head=[1,2]【输出】false提示:链表中节点数目在范围[1,10^5]内0<=Node.v......
  • 力扣---1448. 统计二叉树中好节点的数目
    给你一棵根为 root 的二叉树,请你返回二叉树中好节点的数目。「好节点」X定义为:从根到该节点X所经过的节点中,没有任何节点的值大于X的值。 示例1:输入:root=[3,1,4,3,null,1,5]输出:4解释:图中蓝色节点为好节点。根节点(3)永远是个好节点。节点4->(3,4)是路径中......
  • 力扣---104. 二叉树的最大深度
    给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树[3,9,20,null,null,15,7],3/\920/\157返回它的最大深度 3。来源:力扣(LeetCode)链接:https://leetcode......
  • LeetCode 101. 对称二叉树
    题目链接:LeetCode101.对称二叉树题意:给你一个二叉树的根节点root,检查它是否轴对称。解题思路:1.递归法采用递归法思路就比较简单,因为要比较二叉树是否是轴对称的,因此就是比较左右子树是否轴对称,因此在遍历的过程中,就是比较左边的左子树与右边的右子树是否相等,以及左......
  • LeetCode 周赛 345(2023/05/14)体验一题多解的算法之美
    本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]提问。往期回顾:LeetCode双周赛第104场·流水的动态规划,铁打的结构化思考周赛概览T1.找出转圈游戏输家(Easy)标签:模拟、计数T2.相邻值的按位异或(Medium)标签:模拟、数学、构造T3.矩阵中移动的最......
  • LeetCode 226. 翻转二叉树
    题目链接:LeetCode226.翻转二叉树题意:给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。解题思路:对于每一个节点,只需要考虑反转当前节点的左右子树即可,因此只需要考虑遍历顺序,本题中,采用前序和后序遍历都是可以的,但是中序遍历不行,如果采用中序,会将某些节点反转两......
  • 111
    0.Markdown简介Markdown是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档。轻量:相比于word、ppt等形式的文档,更加重视文本本身的内容,对格式、排版进行了简化,进而在编写方式和文件大小上都进行了减重减负;标记:#、*、-、`、[]、()=简洁实用的文字排版效......
  • 3D打印报错!! {"code":"key111", "msg": "Extrude below minimum temp
    问题:!!{"code":"key111","msg":"Extrudebelowminimumtemp 解决办法:在配置文件中修改:增加:min_extrude_temp:0......
  • LeetCode 94. 二叉树的中序遍历
    题目链接:LeetCode94.二叉树的中序遍历题意:给定一个二叉树的根节点root,返回它的中序遍历。解题思路:对于二叉树的遍历,有递归和非递归两种遍历方式,1.递归遍历**根据“左->根->右”的顺序,直接模拟即可。注意按照递归三部曲(递归的参数和返回值、递归的终止条件、单层......