力扣之广度搜索专题👊【111. 二叉树的最小深度】

172 阅读1分钟

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

题目链接

111. 二叉树的最小深度 - 力扣(LeetCode) (leetcode-cn.com)

题目描述

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

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

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

测试用例

示例 1:

image.png

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

条件限制

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

题目分析

image.png

题目需要我们求二叉树的最小深度,可以理解为,当我们一层层的遍历二叉树时,如果发现其中有一个节点为叶子节点(即没有左右子节点的节点),这个时候,我们就可以停止遍历二叉树了,然后返回我们遍历到了第几层这个值即可

由上分析可以知道,这又需要我们对树进行广度搜索,因为需要记录到树当前遍历到了哪一层这个值,需要使用两个数组来记录当前层需要遍历的节点,以及下一层计划需要遍历的节点,遍历的终止条件就是我们第一次找到符合要求的目标点位

代码实现

var minDepth = function(root) {
    if (root == null) return 0;
    let n = 1,
        arr1 = [root],
        arr2 = [];
    while (arr1.length > 0 || arr2.length > 0) {
        while (arr1.length > 0) {
            let curr = arr1.pop();
            if (curr.left != null) arr2.push(curr.left);
            if (curr.right != null) arr2.push(curr.right);
            if (curr.left == null && curr.right == null) {
                arr2 = [];
                break;
            }
        }
        arr1 = arr2;
        arr2 = [];
        n++;
    }
    return n;
};

image.png

对于这一题,非常的不建议使用深度优先的算法,深度优先算法会用到 递归+回溯 完整的遍历一次数,并比较记录最小深度,唯一的优点就是不会使用到额外的空间去记录其他数据;而广度优先算法则是用空间换时间,最差情况下也就几乎完整的遍历一次树,最优的情况就是计算到第二层就发现最小深度