题目
!! 题目来源:二叉树的最大深度 - 力扣
分析
我们知道,树是天生适合于递归的数据结构,对于这个问题,第一反应自然也是使用递归来解决,那么就需要考虑两个关键点:
- 边界条件是什么?
- 如何计算高度?
边界条件非常简单,当节点为空的时候,返回 0 即可。
而计算高度则稍微有些抽象,这里可以看看下面的动图:
看完图,想必对整个流程就已经非常熟悉了,代码如下:
const maxDepth = (root) => root === null ? 0 : Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
结果如下:
拓展
不使用递归,显然这里只能使用迭代。
事实上,这里我们可以结合队列:
- 首先让根节点入队
- 当队列长度不为零的时候,逐个让当前层的节点出队,并且让其左右子节点入队
- 每走一层,深度加一
具体看一下图就能明白了:
代码如下:
var maxDepth = function (root) {
if (root === null) {
return 0;
}
const queue = [root];
let depth = 1;
while (queue.length) {
const levelSize = queue.length;
for (let i = 0; i < levelSize; i++) {
const current = queue.shift();
if (current.left) queue.push(current.left);
if (current.right) queue.push(current.right);
}
if (queue.length) depth++;
}
return depth;
};
结果如下: