「这是我参与2022首次更文挑战的第36天,活动详情查看:2022首次更文挑战」
111. 二叉树的最小深度
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例 1:
输入: 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++
}
}
};
谢谢大家,一起加油