LeetCode题练习与总结:N 叉树的最大深度--559

news2025/1/20 13:06:23

一、题目描述

给定一个 N 叉树,找到其最大深度。

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

N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。

示例 1:

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

示例 2:

输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:5

提示:

  • 树的深度不会超过 1000 。
  • 树的节点数目位于 [0, 10^4] 之间。

二、解题思路

这个问题可以使用递归的方式来解决。递归是一种常用的处理树形结构的方法,因为它可以简化问题的复杂性。以下是解题步骤:

  1. 如果根节点为空,则树的深度为0。
  2. 对于每个子节点,递归地计算其最大深度。
  3. 根节点的最大深度等于其所有子节点最大深度中的最大值加1。

三、具体代码

class Solution {
    public int maxDepth(Node root) {
        // 如果根节点为空,返回深度0
        if (root == null) {
            return 0;
        }
        
        // 初始化最大深度为0
        int maxDepth = 0;
        
        // 遍历所有子节点
        for (Node child : root.children) {
            // 递归计算每个子节点的最大深度,并更新最大深度
            maxDepth = Math.max(maxDepth, maxDepth(child));
        }
        
        // 当前节点的最大深度等于其子节点的最大深度加1
        return maxDepth + 1;
    }
}

这段代码首先检查根节点是否为空,如果为空则直接返回0。接着,对于每个子节点,递归调用maxDepth函数来计算子树的最大深度,并使用Math.max函数来更新最大深度。最后,返回子树的最大深度加1,即当前树的最大深度。

四、时间复杂度和空间复杂度

1. 时间复杂度

对于给定的N叉树,我们需要遍历每个节点来计算最大深度。在计算每个节点的最大深度时,我们会递归地遍历其所有子节点。假设树中的节点总数为N,子节点的平均数量为M。

在递归过程中,每个节点都会被访问一次,因此算法的时间复杂度主要取决于节点的数量。对于每个节点,我们都会遍历其所有子节点来计算最大深度,这意味着对于每个节点,我们都要执行M次操作(M是子节点的数量)。

因此,算法的时间复杂度可以表示为O(N * M)。然而,由于M是树结构的性质,我们通常不会将其视为一个变量。在N叉树中,如果每个节点的子节点数量是固定的,则可以将时间复杂度简化为O(N),即线性时间复杂度。

2. 空间复杂度

空间复杂度主要取决于递归调用的栈深度。在最坏的情况下,树是完全不平衡的,即每个节点只有一个子节点,递归调用栈的深度将等于树的高度H。

因此,算法的空间复杂度为O(H),即递归栈的空间。在N叉树中,如果树是完全平衡的,树的高度H将是log(N)(以M为底),此时空间复杂度将是O(log(N))。但在最坏的情况下,如果树是完全不平衡的,树的高度H将是N,此时空间复杂度将是O(N)。

五、总结知识点

  • 递归(Recursion)

    • 递归是一种编程技巧,函数在执行过程中会调用自身。
    • 在本代码中,maxDepth 方法通过递归调用来计算每个子节点的最大深度。
  • 基础条件(Base Case)

    • 递归函数通常包含一个或多个基础条件,以防止无限递归。
    • 在本代码中,如果rootnull,则返回深度0,这是递归的基础条件。
  • 循环(Loop)

    • 代码中使用了一个for循环来遍历root节点的所有子节点。
  • 列表(List)

    • root.children是一个List<Node>类型的变量,表示N叉树节点的子节点列表。
  • 数学函数(Math Functions)

    • Math.max函数用于计算两个整数中的最大值。
    • 在本代码中,Math.max(maxDepth, maxDepth(child))用于更新当前计算的最大深度。
  • 返回值(Return Value)

    • return语句用于从函数中返回一个值。
    • 在本代码中,return maxDepth + 1;返回了当前节点的最大深度。
  • 条件语句(Conditional Statement)

    • if语句用于条件判断。
    • 在本代码中,if (root == null)用于检查根节点是否为空。
  • 类和方法定义(Class and Method Definition)

    • 代码定义了一个名为Solution的类和一个名为maxDepth的公共方法。
    • maxDepth方法接受一个Node类型的参数,并返回一个int类型的值。
  • 节点结构(Node Structure)

    • 代码中隐含了Node类的定义,其中包含一个整型变量val和一个Node类型的列表children

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2279367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

51c自动驾驶~合集47

我自己的原文哦~ https://blog.51cto.com/whaosoft/13083194 #DreamDrive 性能爆拉30%&#xff01;英伟达&#xff1a;时空一致下的生成重建大一统新方案~ 从自车的驾驶轨迹中生成真实的视觉图像是实现自动驾驶模型可扩展训练的关键一步。基于重建的方法从log中生成3D场景…

AI 编程工具—Cursor AI 对话模式详解 内嵌对话模式

AI 编程工具—Cursor AI 对话模式详解 内嵌对话模式 前面我们已经学习了Cursor 的两种工作模式,也就是Chat、Composer 更多细节可以看之前的文章 Cursor 对话模式详解 Chat、Composer 与 Normal/Agent 模式 这一节我们按一下最后一种模式,也就是内嵌对话模式 内嵌对话模式…

国产编辑器EverEdit - 合并行

1 合并行 1.1 应用场景 在编写代码或其他场景下&#xff0c;有时需要把多行的内容缩减成一行&#xff0c;或者纯粹减少行数进行合并&#xff0c;比如&#xff1a;下面的字典的定义&#xff0c;每个元素占了一行&#xff0c;有点浪费&#xff0c;现在需要把它们缩减行数。 typ…

postman请求参数化

一、使用环境变量(Environment Variables)进行参数化 1、在请求中使用环境变量 在请求的url、请求头(Headers)、请求体(Body)等部分都可以使用环境变量。 URL 部分示例 点击 Postman 界面右上角的 “眼睛” 图标(Environment Quick Look)打开环境管理窗口单击Edit将变…

[JavaWeb]央视新闻排版

私用学习笔记 一.设置颜色 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>【新思想引领新征程…

Transform论文阅读之Attention Is All You Need(一)and Vit

摘要&#xff1a; 这篇论文的摘要介绍了一种名为Transformer的新型神经网络架构&#xff0c;该架构完全基于自注意力机制&#xff0c;用于解决序列转换任务。Transformer在机器翻译任务中取得了领先的性能&#xff0c;并且相比基于循环或卷积神经网络的传统架构&#xff0c;Tr…

【神经网络基础】

目录 一、神经网络的构成 1.1什么是神经网络&#xff1f; 1.2 激活函数 1.2.1 Sigmoid 1.2.2 Tanh 1.2.3 ReLU 1.2.4 softmax 1.2.5 其他激活函数 1.2.6 选择激活函数 1.3 参数初始化 1.4 模型构建 二、损失函数 2.1 分类问题 2.1.1多分类&#xff08;多分类交叉…

【Linux】Linux入门(2)常见指令

目录 Linux下的文件ls 指令 --- 展示目录pwd指令 --- 显示当前目录cd 指令 --- 改变工作目录touch指令 --- 创建普通文件stat指令 --- 查看文件属性mkdir指令 --- 创建目录rmdir指令 --- 删除目录rm指令 --- 同时删除文件或目录man指令 --- 访问帮助手册cp指令 复制文件或目录m…

202509读书笔记|《飞花令·山》——两岸猿声啼不住,轻舟已过万重山

202509读书笔记|《飞花令山》——两岸猿声啼不住&#xff0c;轻舟已过万重山 《飞花令山》素心落雪编著&#xff0c;飞花令得名于唐代诗人韩翃《寒食》中的名句“春城无处不飞花”&#xff0c;类似于行酒令&#xff0c;是文人们的一种雅致的娱乐活动。 一直都比较喜欢看诗词&a…

GRGDSPC;H-Gly-Arg-Gly-Asp-Ser-Pro-Cys-OH;是一种末端巯基化的细胞粘附肽;91575-26-7

【GRGDSPC 简介】 GRGDSPC 是一种含 7 个氨基酸的多肽&#xff0c;且末端巯基化的细胞粘附肽。化学结构 是H-GLY-ARG-GLY-ASP-SER-PRO-CYS-OH&#xff0c;氨基酸序列为甘氨酸-精氨酸-甘氨酸-天冬氨酸-丝氨酸-脯氨酸-半胱氨酸&#xff0c;C端为羟基&#xff0c;是一种末端巯基化…

抖音ip属地不准是什么原因?可以改吗

在数字化时代&#xff0c;社交媒体平台如抖音已成为人们日常生活的重要组成部分。随着各大平台对用户隐私和数据安全的日益重视&#xff0c;IP属地的显示功能应运而生。然而&#xff0c;不少抖音用户在使用过程中发现&#xff0c;显示的IP属地与实际位置存在偏差&#xff0c;这…

.Net Core微服务入门全纪录(四)——Ocelot-API网关(上)

系列文章目录 1、.Net Core微服务入门系列&#xff08;一&#xff09;——项目搭建 2、.Net Core微服务入门全纪录&#xff08;二&#xff09;——Consul-服务注册与发现&#xff08;上&#xff09; 3、.Net Core微服务入门全纪录&#xff08;三&#xff09;——Consul-服务注…

Zemax 中的二向色分束器和荧光波偏移

二向色分光镜是一种专用光学元件&#xff0c;用于根据光的波长将一束光分成两束独立的光。“二向色”是指该元件根据光的波长选择性地透射或反射光的性质。 在大多数情况下&#xff0c;二向色分束器由一种对不同波长的光具有不同折射率的材料制成。分束器的表面涂有一层薄膜&a…

DevUI 2024 年度运营报告:开源生态的成长足迹与未来蓝图

在当今数字化飞速发展的时代&#xff0c;开源已成为推动技术创新与协作的重要力量。DevUI 作为开源领域的重要一员&#xff0c;其发展历程与成果备受关注。值此之际&#xff0c;GitCode 精心整理了 DevUI 年度运营报告&#xff0c;为您全面呈现 DevUI 社区在过去一年里的开源之…

3 前端(中):JavaScript

文章目录 前言&#xff1a;JavaScript简介一、ECMAscript&#xff08;JavaScript基本语法&#xff09;1 JavaScript与html结合方式&#xff08;快速入门&#xff09;2 基本知识&#xff08;1&#xff09;JavaScript注释&#xff08;和Java注释一样&#xff09;&#xff08;2&am…

rocketmq基本架构

简介 Name server 负责broker注册、心跳&#xff0c;路由等功能&#xff0c;类似Kafka的ZKname server节点之间不互相通信&#xff0c;broker需要和所有name server进行通信。扩容name server需要重启broker&#xff0c;不然broker不会和name server建立连接producer和consum…

ToDesk设置临时密码和安全密码都可以当做连接密码使用

ToDesk 在各领域办公都已经是非常常见了 为了安全 ToDesk 设置了连接密码&#xff0c;想连接 需要输入远程码和连接密码 我们刚打开 系统默认给我们用的是临时密码&#xff0c;安全性确实很强 和定时Tokey一样&#xff0c;固定时间切换。 但是 如果我们要经常连接这个电脑&a…

mysql 系统学习1

Linux C/C 操作MySQL - Henkk - 博客园

事件委托,其他事件,电梯导航,固定导航

事件委托改造 tab 栏切换 tab栏切换&#xff1a;前边的案例是 for 循环遍历每个 li 注册鼠标进入事件&#xff0c;给添加了 active类的 a 删除掉 active类&#xff0c;然后给点击的 a 添加上 active类&#xff08;也就是将已经有的 active 类删除掉&#xff0c;为当前点击到的…

mongoose 支持https踩坑纪实

简述 mongoose是C编写的嵌入式web服务&#xff0c;它能够支持https协议&#xff0c;可以简单的部署&#xff0c;但要做到完美部署&#xff0c;不是那么容易。 部署方法 本人使用的是最新的7.16版&#xff0c;以前版本似乎是要通过修改 头文件中的 MG_ENABLE_SSL 宏定义&…