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

news/2024/10/28 23:39:09/

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 实现解法

方法一:递归
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;}
}
方法二:迭代
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;Queue<TreeNode> queue = new LinkedList<>();queue.add(root);int depth = 0;while (!queue.isEmpty()) {int size = queue.size();depth++;  // 每遍历一层,深度加 1for (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.ppmy.cn/news/1542713.html

相关文章

Linux基础命令(五) 之 cat,head,tail,more,less,grep

目录 一&#xff0c;浏览普通文件内容 二&#xff0c;过滤文件内容显示--grep 参数及其作用 ​编辑 常见用法 一&#xff0c;浏览普通文件内容 注意&#xff1a;以上命令均可以结合管道符一起使用 二&#xff0c;过滤文件内容显示--grep 在指定的普通文件中查找并显示含有…

三款PDF解密工具,轻松打开加密文档

分享三款PDF解密工具&#xff0c;操作简单&#xff0c;可以轻松上手。 1、PDF Candy 这个网站可以将文件转换为PDF和20多种格式。此外&#xff0c;PDF Candy提供47种在线工具来处理PDF:编辑、拆分、合并、压缩、解锁等等。 部分功能&#xff1a; PDF等文件格式转转换 PDF压缩…

R语言笔记(四):函数

文章目录 一、Function basics1、Creating your own function2、Function structure3、Using your created function4、Multiple inputs5、Default inputs 二、Return values and side effects1、Returning more than one thing2、Side effectsExample of side effect: plot 三…

Xcode真机运行正常,打包报错

1.问题&#xff1a; 老项目Xcode真机运行没问题&#xff0c;但但打包的时候却报了以下错误&#xff1a; some files could not be transferred (code 23) at /AppleInternal/Library/BuildRoots/4ff29661-3588-11ef-9513-e2437461156c/Library/Caches/com.apple.xbs/Sources/r…

FreeSWITCH JSON API

仅举几例&#xff1a; fs_cli -x json {"command" : "status", "data" : ""} fs_cli -x json {"command" : "sofia.status", "data" : ""} fs_cli -x json {"command" : "…

从零开始学PHP之函数

函数 概念 函数是通过调用函数来执行的。emmm这个是官方解释&#xff0c;函数就是封装一段用于完成特定功能的代码。 通俗理解函数&#xff1a;可以完成某个工作的代码块&#xff0c;就像小朋友搭房子用的积木一样&#xff0c;可以反复使用&#xff0c;在使用的时候&#xff…

【若依笔记】-- 精简若依项目只保留系统管理

环境&#xff1a;最近项目需要计划使用若依来开发软件&#xff0c;使用若依有一个问题&#xff0c;若依代码框架还是比较冗余&#xff0c;不够精简&#xff0c;还有一点是若依Security权限校验&#xff0c;对于实现一对多的前台&#xff0c;比较麻烦&#xff0c;我这边的业务是…

Spring Boot 实现文件分片上传和下载

文章目录 一、原理分析1.1 文件分片1.2 断点续传和断点下载1.2 文件分片下载的 HTTP 参数 二、文件上传功能实现2.1 客户端(前端)2.2 服务端 三、文件下载功能实现3.1 客户端(前端)3.2 服务端 四、功能测试4.1 文件上传功能测试4.2 文件下载功能实现 参考资料 完整案例代码&…