携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情
描述
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
示例 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
思路
1.这道题采用 递归的方法来实现
2.首先判断当前根节点root是否为空,如果当前根节点root为空,说明此时树的高度为0,所以这个二叉树的最小深度就是0
3.然后在判断根节点的左右子树是否都为空。如果根节点的左右子树都为空,说明只有根节点这一个节点,说明这个二叉树的最小深度就是1。
4.否则就是左右子树都存在的情况。这个时候就需要分别找到左右子树的最小深度,然后取这两个最小值的其中一个,最后将这个最小值+1,+1是因为表示当前左子树或者右子树存在一个节点。
5.首先我们定义一个最小值,为了安全起见,我们使用Number.MAX_SAFE_INTEGER来表示最小值
6.接着判断 当左子树存在的时候,从Number.MAX_SAFE_INTEGER和递归左子树中找到最小值,将最小值赋值给变量 ans
7..接着判断 当右子树存在的时候,从Number.MAX_SAFE_INTEGER和递归右子树中找到最小值,将最小值赋值给变量 ans
8.最后返回 ans + 1即可
代码
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var minDepth = function(root) {
if(root == null) {
return 0;
}
if(root.left == null && root.right == null) {
return 1;
}
let ans = Number.MAX_SAFE_INTEGER;
if(root.left != null) {
ans = Math.min(minDepth(root.left), ans);
}
if(root.right != null) {
ans = Math.min(minDepth(root.right), ans);
}
return ans + 1;
};