代码随想录算法训练营第十四天 | 104.二叉树的最大深度、111.二叉树的最小深度

69 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情

104.二叉树的最大深度

题目分析

题目要求求出一个二叉树的最大深度,二叉树的最大深度就是根节点到最远叶子节点上最长路径的节点数。这道题继续用递归的方法实现。

解决

首先要确定这道题的返回值就是结果,终止条件是当根节点为空时,代表高度为0,返回0。

接下来确定每一层循环的逻辑,首先求他左子树的深度,然后再求右子树的深度,最后左右深度比较取大值再加一。

代码如下:

var maxDepth = function(root) {
    const getDepth = function(node) {
        if(node === nullreturn 0;
        let left = getDepth(node.left)
        let right = getDepth(node.right)
        let depth = 1 + Math.max(left,right)
        return depth
    }
    return getDepth(root)
};

这道题比较简单,主要是单层循环的逻辑要掌握。

111.二叉树的最小深度

题目分析

题目要求求二叉树的最小深度,最小深度是从根节点到最近叶子节点的最短路径上的节点数量。值得注意的是到叶子节点,也就是左右子树都为空的节点

解决

这道题与上道题的主要区别点就是对左右子树为空的判断,比如左子数为空时,最小深度不是左子树的深度,而是右子树的深度。

代码如下:

var minDepth1 = function(root) {
    if(!root) return 0;
    if(!root.left && !root.right) return 1;
    if(!root.left) return 1 + minDepth(root.right);
    if(!root.right) return 1 + minDepth(root.left);
    return Math.min(minDepth(root.left), minDepth(root.right)) + 1;
};

首先要判断,如果只有叶子节点,则返回一。如果没有左节点,那么就返回右子树最小深度加一,如果没有右节点,那么就返回左子数最小深度加一。其他的就和上一题的逻辑相同。

总结

这两道题都不是很难,注意递归法首先进行三要素的分析。