持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情
104.二叉树的最大深度
题目分析
题目要求求出一个二叉树的最大深度,二叉树的最大深度就是根节点到最远叶子节点上最长路径的节点数。这道题继续用递归的方法实现。
解决
首先要确定这道题的返回值就是结果,终止条件是当根节点为空时,代表高度为0,返回0。
接下来确定每一层循环的逻辑,首先求他左子树的深度,然后再求右子树的深度,最后左右深度比较取大值再加一。
代码如下:
var maxDepth = function(root) {
const getDepth = function(node) {
if(node === null) return 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;
};
首先要判断,如果只有叶子节点,则返回一。如果没有左节点,那么就返回右子树最小深度加一,如果没有右节点,那么就返回左子数最小深度加一。其他的就和上一题的逻辑相同。
总结
这两道题都不是很难,注意递归法首先进行三要素的分析。