【Daily Interview】- 17 二叉树的最大深度

353 阅读1分钟

题目

img01
img01

!! 题目来源:二叉树的最大深度 - 力扣

分析

我们知道,树是天生适合于递归的数据结构,对于这个问题,第一反应自然也是使用递归来解决,那么就需要考虑两个关键点:

  • 边界条件是什么?
  • 如何计算高度?

边界条件非常简单,当节点为空的时候,返回 0 即可。

而计算高度则稍微有些抽象,这里可以看看下面的动图:

img02
img02

看完图,想必对整个流程就已经非常熟悉了,代码如下:

const maxDepth = (root) => root === null ? 0 : Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;

结果如下:

img03
img03

拓展

img04
img04

不使用递归,显然这里只能使用迭代。

事实上,这里我们可以结合队列:

  • 首先让根节点入队
  • 当队列长度不为零的时候,逐个让当前层的节点出队,并且让其左右子节点入队
  • 每走一层,深度加一

具体看一下图就能明白了:

img05
img05

代码如下:

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;
};

结果如下:

img06
img06