力扣链接: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;
}