leetcode-二叉树-111- 二叉树的最小深度

138 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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;
};