[路飞]_程序员必刷力扣题: 111. 二叉树的最小深度

166 阅读2分钟

「这是我参与2022首次更文挑战的第36天,活动详情查看:2022首次更文挑战

111. 二叉树的最小深度

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

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

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

示例 1:

image.png

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

示例 2:

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

提示:

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

递归

思路 有题目可知,我们需要求出二叉树中的最小深度,所以我们很容易联想到用递归的方式去求这课二叉树的深度,只是这里求的是最小深度

特别要注意的一点是,最小深度的定义,根节点到叶子节点之间的深度

所以在示例二中我们可以看到它的深度为5

递归遍历整棵二叉树即可

具体实现:

  • 判断边界条件root为空的情况直接return 0
  • root不为空的情况,声明min用来保存最小深度,此时必然min>0
    • 遇到空节点null直接return
    • 遇到叶子结点开始赋值
      • 如果min为0则赋值
      • 如果min不为0则取最小深度
  • 继续递归子节点 最后返回min即可
var minDepth = function (root) {
    // root为空的情况直接返回0
    if (!root) return 0
    // root不为空的情况
    var min = 0
    function minDeep(root, deep) {
        // 如果节点为null直接retur
        if (!root) return
        // 节点不为空,且没有子节点,就是叶子结点
        if (!root.left && !root.right) {
            // 如果min===0那么就要赋值
            if (!min) {
                min = deep + 1
            } else {
            // 如果min!==0就要取最小深度
                min = Math.min(min, deep + 1)
            }
            return
        }
        // 继续递归
        minDeep(root.left, deep + 1)
        minDeep(root.right, deep + 1)
    }
    minDeep(root, 0)
    return min
};

层序遍历

思路 这里我们使用层序遍历的方式,这样只需要找到一颗叶子节点即可结束循环

具体实现:

  • 判断边界条件root为空的情况直接return 0
  • root不为空的情况,depp>=1,这里声明deep=1开始
  • while循环包装在数组中的root,每次pop一个节点
    • 如果是叶子节点直接返回deep即可,否则将子节点放入下一层的数组next中
    • 当root的长度为空时,进入下一层循环
      • root赋值为next,next清空为新数组
      • 此时进入下一层的遍历deep+=1

到此解题结束

var minDepth = function (root) {
    if(!root) return 0
    var deep = 1
    var root = [root]
    var next = []
    while(root.length){
        var item = root.pop()
        var left = item.left
        var right =item.right
        // 判断是否是叶子节点
        if(!left&&!right){
            return deep
        }else{
            left&&next.push(left)
            right&&next.push(right)
        }
        // 进入下一层
        if(root.length===0){
            root = next
            next = []
            deep++
        }
    }
};

谢谢大家,一起加油