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

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

时间:2024-10-18 09:17:52浏览次数:3  
标签:TreeNode nil res 最小 queue depth 111 二叉树 root

文章目录

111. 二叉树的最小深度

111. 二叉树的最小深度

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

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

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

示例 1:
在这里插入图片描述

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

示例 2:

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

提示:

  • 树中节点数的范围在 [0, 10^5] 内
  • -1000 <= Node.val <= 1000

解题思路

递归法

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func minDepth(root *TreeNode) int {
    if root == nil {
        return 0
    }
    
    res := math.MaxInt32
    dfs(root,1,&res)
    return res
}

func dfs(root *TreeNode,depth int ,res *int) {
    if root == nil {
        return 
    }
    // 中,处理逻辑:判断是不是叶子结点,更新最小深度
    if root.Left == nil && root.Right == nil {
        if depth < *res {
            *res = depth
        }
    }

    if root.Left != nil { // 左
        dfs(root.Left,depth + 1,res)
    }

    if root.Right != nil { // 右
        dfs(root.Right,depth + 1,res)
    }
}

迭代法

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func minDepth(root *TreeNode) int {
    if root == nil {
        return 0
    }
    
    // 层序遍历,遍历到第一个左右孩子为空的节点(叶子节点)所在层,就是最小深度
    queue := make([]*TreeNode,0)
    queue = append(queue,root)
    depth := 0
    for len(queue) > 0 {
        queueSize := len(queue)
        depth++
        for i := 0;i < queueSize;i++ {
            curNode := queue[0]
            queue = queue[1:]
            // 遍历到了第一个叶子节点所在的层,当前层就是最小深度
            if curNode.Left == nil && curNode.Right == nil {
                return depth
            }
            if curNode.Left != nil {
                queue = append(queue,curNode.Left)
            }
            if curNode.Right != nil {
                queue = append(queue,curNode.Right)
            }
        }
    }
    
    return depth
}

在这里插入图片描述

标签:TreeNode,nil,res,最小,queue,depth,111,二叉树,root
From: https://blog.csdn.net/YouMing_Li/article/details/142967650

相关文章

  • 二叉树的中序遍历
    给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。示例1:输入:root=[1,null,2,3]输出:[1,3,2]示例2:输入:root=[]输出:[]示例3:输入:root=[1]输出:[1]提示:树中节点数目在范围 [0,100] 内-100<=Node.val<=100进阶: 递归算法很简单,你可以通......
  • 109. 有序链表转换二叉搜索树【二叉树】
    文章目录109.有序链表转换二叉搜索树解题思路Go代码109.有序链表转换二叉搜索树109.有序链表转换二叉搜索树给定一个单链表的头节点head,其中的元素按升序排序,将其转换为平衡二叉搜索树。平衡二叉树是指该树所有节点的左右子树的深度相差不超过1。示例......
  • 最小生成树(Minimum Spanning Tree,MST)初步
    定义连通图的最小生成树(MinimumSpanningTree,MST)为边权和最小的生成树。注意:只有连通图才有生成树,而对于非连通图,只存在生成森林。思路分为Kruskal与Prim两种算法。Kruskal从最小边权的边开始,按边权从小到大依次遍历。若当前边连接的两点不连通,加入此边。Prim每次选......
  • 七、二叉树之链式结构(递归)
    一、前序:前面章节所说二叉树的结构其实是递归的,为什么这样说呢?根节点有左右子树,根节点的左右孩子又有左右子树,以此类推,直到叶子节点,它的左右子树为NULL,开始返回。所以,我们把它分成一个又一个的子树来分析。因此,它的结构是递归的。因为一开始接触二叉树,还不是熟悉,我们先来手动......
  • P11189 「KDOI-10」水杯降温
    P11189「KDOI-10」水杯降温-洛谷|计算机科学教育新生态(luogu.com.cn)庆贺吧,第一个真正意义上的自己干出来的紫题。总用时4h。时间复杂度\(O(n\logn)\),对于每个点我们去找它可以吹气的最大次数和最小次数。如果一个点的最小次数大于它的最大次数,或者在计算父节点u最......
  • LeetCode 209 - 长度最小的子数组(滑动窗口法)
    题目描述给定一个含有n个正整数的数组和一个正整数target,我们要找出该数组中满足其总和大于等于target的长度最小的子数组,即子数组[nums_left,nums_right],并返回其长度。如果不存在符合条件的子数组,返回0。解题思路我们可以使用滑动窗口解决这道问题。初始化左指针......
  • 使用 Go 构建一个最小的 API 应用
    最近有项目要使用Go开发,作为一个.NETCore选手,准备先撸一个包含CRUD的最小MVP项目练手。要创建一个TODO应用,会创建下面这些接口:APIDescriptionRequestbodyResponsebodyGET/todoitemsGetallto-doitemsNoneArrayofto-doitemsGET/todoitems/c......
  • 信息学奥赛复赛复习18-CSP-J2022-01解密-二分答案、二分找边界、二分时间复杂度、二分
    PDF文档公众号回复关键字:202410171P8814[CSP-J2022]解密[题目描述]给定一个正整数k,有k次询问,每次给定三个正整数ni,ei,di,求两个正整数pi,qi,使ni=pi×qi、ei×di=(pi−1)(qi−1)+1[输入格式]第一行一个正整数k,表示有k次询问。接下来k行,第i行三个正整数......
  • Java数据结构二叉树面试题精华(画图详解)
    前言:    针对二叉树,因为涉及到递归,需要跟多的练习强化递归的思想,其中也包括需要画图理解一些想不通的问题来提升自己!    一下面这些题为例,一起来提升自己的逻辑思维能力!(可能其中一些题已经写过,但是希望能再写一遍有助于提高代码能力)相同的树:      ......
  • 11111
    #include<bits/stdc++.h>usingnamespacestd;structnode{   intd;   intn;};nodea[10000]={{0,0},{5,3},{4,5},{3,2},{2,0},{1,4}};intn=5,i,h=1;intinsert(){尾删}intpush(intx){头增   n++;   a[n].d=x;   a[n].n=h;   h=n;......