Skip to content

力扣链接:104.二叉树的最大深度

难度:⭐

✏️ 方法一:

解题关键词:二叉树递归

解题思路:使用递归计算左右子树的最大深度,递归终止条件就是当前节点为空,为空时返回0,不为空时,取当前节点左右子树中最大的深度,并且加 1 后返回。

typescript
function maxDepth(root: TreeNode | null): number {
  // 递归终止条件是当前递归的节点为空
  if (root === null) return 0;

  // 递归计算左子树最大深度
  const leftDepth = maxDepth(root.left);
  // 递归计算右子树最大深度
  const rightDepth = maxDepth(root.right);

  // 取当前节点左右子树中最大的深度,并且加 1 后返回
  return 1 + Math.max(leftDepth, rightDepth);
}

✏️ 方法二:

解题关键词:二叉树层序遍历

解题思路:使用层序遍历,遍历到每一层的时候,depth++,最后返回 depth。

typescript
function maxDepth(root: TreeNode | null): number {
  // 如果 root 为空,直接返回0
  if (root === null) return 0;

  // 最大深度
  let maxDepth = 0;
  // 队列
  const queue: TreeNode[] = [root];

  // 当队列不为空时
  while (queue.length) {
    let size = queue.length;

    while (size--) {
      // 出队
      const node = queue.shift();
      // 处理左节点
      if (node.left) queue.push(node.left);
      // 处理右节点
      if (node.right) queue.push(node.right);
    }

    // 这一层出队完了,depth++
    maxDepth++;
  }

  return maxDepth;
}