「这是我参与2022首次更文挑战的第 13 天,活动详情查看:2022首次更文挑战」
题目链接
111. 二叉树的最小深度 - 力扣(LeetCode) (leetcode-cn.com)
题目描述
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
测试用例
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:2
条件限制
- 树中节点数的范围在 内
- 1000 <= Node.val <= 1000
题目分析
题目需要我们求二叉树的最小深度,可以理解为,当我们一层层的遍历二叉树时,如果发现其中有一个节点为叶子节点(即没有左右子节点的节点),这个时候,我们就可以停止遍历二叉树了,然后返回我们遍历到了第几层这个值即可
由上分析可以知道,这又需要我们对树进行广度搜索,因为需要记录到树当前遍历到了哪一层这个值,需要使用两个数组来记录当前层需要遍历的节点,以及下一层计划需要遍历的节点,遍历的终止条件就是我们第一次找到符合要求的目标点位
代码实现
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;
};
对于这一题,非常的不建议使用深度优先的算法,深度优先算法会用到 递归+回溯 完整的遍历一次数,并比较记录最小深度,唯一的优点就是不会使用到额外的空间去记录其他数据;而广度优先算法则是用空间换时间,最差情况下也就几乎完整的遍历一次树,最优的情况就是计算到第二层就发现最小深度