Leetcode 每日一题 104.二叉树的最大深度

发布于:2024-12-08 ⋅ 阅读:(235) ⋅ 点赞:(0)

目录

问题描述

示例

示例 1:

示例 2:

约束条件

题解

方法一:广度优先搜索(BFS)

步骤

代码实现

方法二:递归

步骤

代码实现

结论


问题描述

给定一个二叉树 root,我们需要返回其最大深度。二叉树的最大深度是指从根节点到最远叶子节点的最长路径上的节点数。

示例

示例 1:

输入:root = [3,9,20,null,null,15,7] 输出:3

示例 2:

输入:root = [1,null,2] 输出:2

约束条件

  • 树中节点的数量在 [0, 10^4] 区间内。
  • -100 <= Node.val <= 100

题解

我们将使用两种方法来解决这个问题:广度优先搜索(BFS)和递归。

过题图片:

方法一:广度优先搜索(BFS)

BFS 是一种遍历树的层序方法,它从根节点开始,逐层遍历树的每个节点。在每一层,我们记录节点的数量,直到遍历完所有节点。

步骤
  1. 如果根节点为空,返回深度为 0。
  2. 初始化一个队列,将根节点加入队列。
  3. 初始化一个计数器,用于记录当前层的深度。
  4. 当队列不为空时,执行以下操作:
    • 记录当前层的节点数。
    • 遍历当前层的每个节点,将它们的子节点加入队列,并更新深度计数器。
  5. 返回深度计数器的值。
代码实现

java

import java.util.LinkedList;
import java.util.Queue;

class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) return 0;

        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        int depth = 0;

        while (!queue.isEmpty()) {
            int size = queue.size();
            for (int i = 0; i < size; i++) {
                TreeNode node = queue.poll();
                if (node.left != null) queue.offer(node.left);
                if (node.right != null) queue.offer(node.right);
            }
            depth++;
        }

        return depth;
    }
}

方法二:递归

递归方法利用了二叉树的最大深度属性:一个节点的最大深度是其左子树和右子树最大深度的最大值加 1。

步骤
  1. 如果根节点为空,返回深度为 0。
  2. 递归计算左子树和右子树的最大深度。
  3. 返回左子树和右子树最大深度的最大值加 1。
代码实现

java复制

class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) return 0;
        return 1 + Math.max(maxDepth(root.left), maxDepth(root.right));
    }
}

题目链接

104. 二叉树的最大深度 - 力扣(LeetCode)

结论

两种方法都可以有效地求解二叉树的最大深度问题。BFS 方法在遍历过程中逐层计算深度,而递归方法利用了树的结构特性进行求解。根据具体的应用场景和偏好,可以选择适合的方法。


网站公告

今日签到

点亮在社区的每一天
去签到