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

leetcode hot100【LeetCode 104. 二叉树的最大深度】java实现

LeetCode 104. 二叉树的最大深度

题目描述

给定一个二叉树,找出其最大深度。

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

示例 1:

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

示例 2:

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

示例 3:

输入:root = []
输出:0

提示: 树的高度不会超过 10^4 节点。

Java 实现解法

方法一:递归
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    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;
    }
}
方法二:迭代
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public int maxDepth(TreeNode root) {
        if (root == null) return 0;

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

        while (!queue.isEmpty()) {
            int size = queue.size();
            depth++;  // 每遍历一层,深度加 1

            for (int i = 0; i < size; i++) {
                TreeNode node = queue.poll();  // 从队列中取出节点
                if (node.left != null) queue.add(node.left);  // 加入左子节点
                if (node.right != null) queue.add(node.right);  // 加入右子节点
            }
        }
        return depth;
    }
}

解题思路

方法一:
  • 递归方法
    • 如果当前节点 root 为空,返回深度为 0。
    • 递归地计算左子树和右子树的最大深度。
    • 返回两个子树中较大深度加 1(当前节点的深度)。

这种方法的时间复杂度是 O(n),其中 n 是树中节点的数量,因为每个节点恰好被访问一次。空间复杂度是 O(h),其中 h 是树的高度,这取决于递归调用的栈空间,在最坏情况下(树完全不平衡,如链状结构),空间复杂度为 O(n)。

方法二:
  • 迭代方法
    • 使用一个队列来实现层次遍历(也称为广度优先搜索,BFS)。
    • 如果根节点为空,直接返回深度为 0。
    • 初始化一个队列并将根节点加入队列,同时初始化深度为 0。
    • 进入循环,直到队列为空,表示所有节点都被访问过。
    • 在每次循环中,计算当前层的节点数,然后遍历这些节点,将它们的子节点加入队列。
    • 每遍历完一层,深度加一。
      这种方法的时间复杂度同样是 O(n),其中 n 是树中节点的数量,因为每个节点恰好被访问一次。空间复杂度是 O(m),其中 m 是树的宽度,即队列中存储的最大节点数,这取决于树的最宽层。在最宽的树(所有非叶子节点都具有两个子节点)中,空间复杂度为 O(n/2),即 O(n)。

http://www.kler.cn/a/369636.html

相关文章:

  • 在Java中的动态绑定和静态绑定
  • AI最新动态概览-2024年10月28日
  • 【实用知识】Spring Boot 优雅捕捉异常的几种姿势
  • 【损害和风险评估&坑洼】路面坑洼检测系统源码&数据集全套:改进yolo11-DCNV3
  • 在Postgresql中对空间数据进行表分区的实践
  • 【AIGC】从CoT到BoT:AGI推理能力提升24%的技术变革如何驱动ChatGPT未来发展
  • 监控场景下,视频SDK的应用策略
  • Chrome谷歌浏览器加载ActiveX控件之allWebDesktop控件介绍
  • 要将Burp Suite设置为中文,操作步骤
  • 基于SSM轻型卡车零部件销售系统的设计
  • 特种作业操作高压电工题库
  • 容器化核心快速入门
  • 隨筆 20241023 Kafka 的数据事
  • 11月12日Sui Connect: 曼谷站开启,准备好见面了吗?
  • 自考经历与学习总结
  • 【Spring】Spring Boot 配置文件(7)
  • Docker 私有仓库 Harbor介绍
  • go-zero 的使用
  • 深入解析 OceanBase 数据库中的局部索引和全局索引
  • 模型训练识别手写数字(一)
  • 深入理解支持向量机:从基本原理到实际应用
  • 数据库中少数民族名字的存储
  • vue子组件修改父组件的值
  • #渗透测试#红蓝对抗#Src漏洞挖掘 介绍-Yakit(3)
  • 深度学习:SGD的缺点
  • redis学习路线和内容