当前位置: 首页 > news >正文

LeetCode:二叉树的最大深度

1、题目描述

给定一个二叉树 root ,返回其最大深度。

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

示例 1:

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

示例 2:

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

提示:

  • 树中节点的数量在 [0, 104] 区间内。

  • -100 <= Node.val <= 100

2、方法:递归法(深度优先DFS)

解题思路

递归法通过分解问题为子问题求解,分别计算左右子树的最大深度,再取较大值加 1(当前节点)。

步骤:

  1. 终止条件:当前节点为 null 时,深度为 0。

  2. 递归计算

    • 计算左子树的最大深度 leftDepth

    • 计算右子树的最大深度 rightDepth

  3. 返回结果max(leftDepth, rightDepth) + 1

时间复杂度:O(n),空间复杂度:O(n) (调用栈)

public int maxDepth(TreeNode root) {if (root == null) return 0;  // 终止条件int leftDepth = maxDepth(root.left);   // 递归左子树int rightDepth = maxDepth(root.right); // 递归右子树return Math.max(leftDepth, rightDepth) + 1; // 当前节点深度
}

3、方法2:迭代法(广度优先BFS)

解题思路

迭代法通过队列按层遍历节点,每遍历完一层,深度加 1。

步骤:

  1. 初始化:根节点入队,初始化深度 depth = 0

  2. 按层遍历

    • 记录当前层的节点数 size

    • 弹出 size 个节点,并将它们的子节点入队。

    • 每处理完一层,depth++

  3. 返回结果:队列为空时返回 depth

时间复杂度:O(n),空间复杂度:O(n) (栈空间)

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();  // 当前层的节点数while (size-- > 0) {      // 处理当前层所有节点TreeNode currNode = queue.poll();if (currNode.left != null) queue.offer(currNode.left);if (currNode.right != null) queue.offer(currNode.right);}depth++;  // 层数增加}return depth;
}

http://www.xdnf.cn/news/331795.html

相关文章:

  • React Native主题切换、字号调整:不用styled-components也能玩出花
  • 查询nvidia边缘设备的软硬件版本jetson_release
  • 【软件设计师:程序语言】4.程序语言基础知识
  • Unity-Socket通信实例详解
  • 【面试 · 二】JS个别重点整理
  • leetcode hot100 技巧
  • C++函数栈帧详解
  • Ultralytics中的YOLODataset和BaseDataset
  • comfyui 实现中文提示词翻译英文进行图像生成
  • 低成本监控IPC模组概述
  • D盘出现不知名文件
  • int (*)[3]和int (*arr_ptr)[3]区别
  • Spark应用部署模式实例
  • 个人网站versionI正式上线了!Personal Website for Jing Liu
  • ✍️【TS类型体操进阶】挑战类型极限,成为类型魔法师!♂️✨
  • JAVA八股文
  • CI/CD与DevOps流程流程简述(提供思路)
  • 使用pdm管理python项目时去哪里找nuitka
  • 如何通过复盘提升团队能力?
  • 数组和集合
  • 【C++的类型转换】
  • 【漏洞预警】:致远OA V8.1 SP2 data.htm DOM型XSS漏洞
  • 使用 `detach()` 断开与共享特征层的连接
  • (已完结)完美解决C盘拓展卷是灰色的无法扩容的问题以及如何正确地在WINDOS上从一个盘扩容到C盘
  • Android 如何理解 Java JNI 中的引用与 Java 对象应用的区别
  • java算法的核心思想及考察的解题思路
  • Codeforces Round 1022 (Div. 2)
  • YOLOv1:开创实时目标检测新纪元
  • go.mod没有自动缓存问题
  • vue截图-html2canvas