「这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战」
题目
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
解题思路
一开始分析的很简单,直接把二叉树的值看成了数组,想着null刚好也保留着,那就直接简单粗暴的求数组长度截2的次方即可。
深度为1时,数组的长度为1,2的零次方。
深度为2时,数组的长度为2,2的一次方。
深度为3时,数组的长度为4,2的二次方。
深度为4时,数组的长度为8,2的四次方
。。。以此类推
代码如下:
// 这种情况下的root只能是单纯的数组,所以在本题中并不可行。
// Math.log2 表示返回一个数以 2 为底数的对数。
var maxDepth = function(root) {
return Math.log2(root.length);
};
而题目中给我们的root其实是一个二叉树的形式,下面给出这道题目的正确解题思路:
方法:DFS
- 标签:DFS深度优先遍历
- 找出终止条件:当前节点为空
- 找出返回值:节点为空时说明高度为 0,所以返回 0;节点不为空时则分别求左右子树的高度的最大值,同时加1表示当前节点的高度,返回该数值
- 某层的执行过程:在返回值部分基本已经描述清楚
- 时间复杂度:O(n)
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var maxDepth = function(root) {
if(!root) {
return 0;
} else {
const left = maxDepth(root.left);
const right = maxDepth(root.right);
return Math.max(left, right) + 1;
}
};
结束语
这里是小葵🌻,只要把心朝着太阳的地方,就会有温暖~
让我们一起来攻克算法难关吧!!