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

目录

问题描述

示例

示例 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 方法在遍历过程中逐层计算深度,而递归方法利用了树的结构特性进行求解。根据具体的应用场景和偏好,可以选择适合的方法。

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

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

相关文章

数据结构--树二叉树顺序结构存储的二叉树(堆)

前言 前面我们学习了顺序表、链表、栈和队列&#xff0c;这些都是线性的数据结构。今天我们要来学习一种非线性的数据结构——树。 树的概念及结构 树的概念 树是一种非线性的数据结构&#xff0c;是由n&#xff08;n≥0&#xff09;个有效结点组成的一个具有层次关系的集合…

代码随想录第31天

56. 合并区间 class Solution:def merge(self, intervals: List[List[int]]) -> List[List[int]]:intervals.sort(keylambda p: p[0]) # 按照左端点从小到大排序ans []for p in intervals:if ans and p[0] < ans[-1][1]: # 可以合并ans[-1][1] max(ans[-1][1], p[1…

MicroSoft Project2007 安装教程

一、安装教程 访问地址 二、安装链接 通过网盘分享的文件&#xff1a;Project2007CD 链接: https://pan.baidu.com/s/1Y8VnhVPiKjcmAEh8cIR5sQ?pwdp2hk 提取码: p2hk --来自百度网盘超级会员v6的分享

揭示Lyapunov方法的奥秘:控制理论中的稳定性之钥

揭示Lyapunov方法的奥秘&#xff1a;控制理论中的稳定性之钥 引言 在控制理论和动力系统的研究中&#xff0c;稳定性分析始终是一个核心问题。19世纪末&#xff0c;俄罗斯杰出的数学家亚历山大米哈伊洛维奇李雅普诺夫&#xff08;Aleksandr Mikhailovich Lyapunov&#xff09…

【娱乐项目】基于cnchar库与JavaScript的汉字查询工具

Demo介绍 利用了 cnchar 库来进行汉字相关的信息查询&#xff0c;并展示了汉字的拼音、笔画数、笔画顺序、笔画动画等信息用户输入一个汉字后&#xff0c;点击查询按钮&#xff0c;页面会展示该汉字的拼音、笔画数、笔画顺序&#xff0c;并绘制相应的笔画动画和测试图案 cnchar…

C#.Net筑基 - 常见类型

01、结构体类型Struct 结构体 struct 是一种用户自定义的值类型&#xff0c;常用于定义一些简单&#xff08;轻量&#xff09;的数据结构。对于一些局部使用的数据结构&#xff0c;优先使用结构体&#xff0c;效率要高很多。 可以有构造函数&#xff0c;也可以没有。因此初始化…

怎么选拔人才

1.引入案例&#xff1a;航天员的选拔 一、选拔&#xff1a; 1.测评和甄选的概念2.测评甄选的程序3.测评甄选原则&#xff1a;因事择人、人岗匹配&#xff1b;科学考核&#xff0c;平等竞争&#xff1b;德才兼备4.测评甄选的信效度&#xff1a;稳定系数、等值系数、内在一致系…

nginx-1.22.1 limit_req功能在C底层实现

##nginx.conf配置文件limit_req配置 ##nginx限制访问频率&#xff0c;限流 http { limit_req_zone $binary_remote_addr zoneone:30m rate1r/s; server { listen 8103; server_name localhost; location ~ ^/yym/ { …

Android 混淆问题

我的安卓混淆只需要在gradle里面开启就行了。 buildTypes {release {minifyEnabled trueshrinkResources truezipAlignEnabled trueproguardFiles getDefaultProguardFile(proguard-android-optimize.txt), proguard-rules.pro}} minifyEnabled true 这个就是开启方法&#xf…

XELA - uSkin 三轴触觉传感器:为机器人赋予敏锐触感

XELA Robotics 的 uSkin 触觉传感器以其创新性在机器人技术中备受关注。它凭借高密度设计和三轴力测量能力&#xff0c;大幅提升了机器人的触觉感知能力&#xff0c;这种技术不但增强了机器人的智能化和柔性&#xff0c;还为不同行业的应用创造了广泛的可能性。其中在机器人灵巧…

【前端开发】老年模式:字体大小设置

导入插件&#xff1a;npm install postcss-px-to-viewport--save-dev postcss-px-to-viewport&#xff1a;将px单位转换为视口单位的 (vw, vh, vmin, vmax) 的 PostCSS 插件 在根目录下新建文件&#xff1a;postcss.config.js const path require(“path”); module.exports …

k8s集成skywalking

如果能科学上网的话&#xff0c;安装应该不难&#xff0c;如果有问题可以给我留言 本篇文章我将给大家介绍“分布式链路追踪”的内容&#xff0c;对于目前大部分采用微服务架构的公司来说&#xff0c;分布式链路追踪都是必备的&#xff0c;无论它是传统微服务体系亦或是新一代…

Card组件的用法

文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了DataTable的排序功能相关的内容,本章回中将介绍Card Widget.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在本章回中介绍的Card Widget是一种容器类组件,它可以包含其它的组件,它的大小随着被包含…

【人工智能】Python与强化学习:从零实现多臂老虎机(Multi-Armed Bandit)问题

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 强化学习是一种模仿生物行为的学习方法,在不确定环境中寻找最优策略。多臂老虎机(Multi-Armed Bandit, MAB)是强化学习的经典问题之一,模拟了在多个选择中如何平衡探索和利用,以获取最大的长期回报。…

Ubuntu WiFi检测

ubuntu检测到多个同名wifi&#xff0c;怎么鉴别假冒的wifi&#xff1f; 在Ubuntu中&#xff0c;如果检测到多个同名的Wi-Fi网络&#xff0c;可能存在假冒的Wi-Fi&#xff08;例如“蜜罐”攻击&#xff09;。以下是一些鉴别假冒Wi-Fi的方法&#xff1a; 检查信号强度&#xff1a…

【论文格式】同步更新中

1横向和纵向坐标的坐标密度不能太大&#xff0c;显示太多看起来不好看&#xff0c;本课题组采用emf&#xff0c;目前使用页面内紧凑&#xff0c;600dpi 2Force(kN):k小写 3涉及到变量的&#xff0c;变量本身斜体

cesium中的CallbackProperty

Cesium中的CallbackProperty函数解析 在Cesium中&#xff0c;CallbackProperty是一个非常有用的特性&#xff0c;它允许开发者动态更新实体&#xff08;Entity&#xff09;的属性&#xff0c;例如位置、方向、高度等。这种动态更新的能力使得Cesium在处理与时间相关的数据时变…

win10 docker启动报错virtual machine platform not enabled

Docker启动报错virtual machine platform not enabled。原因是windows未启动虚拟化平台。 跟着下面的操作基本都能解决问题。 1.打开控制面板 2.在启用或关闭windows功能中开启Hyper-V和虚拟机平台 这个虚拟机平台也一定要勾选&#xff0c;我看晚上很多帖子是没说需要勾选这个…

【jvm】C1编译器和C2编译器的区别

目录 1. 说明2. 主要特点2.1 C1编译器2.2 C2编译器 3. 编译过程与优化策略3.1 C1编译器3.3 C2编译器 4. 分层编译与协作机制5. 性能影响与选择 1. 说明 1.JVM&#xff08;Java虚拟机&#xff09;中的C1编译器和C2编译器是两种不同的即时编译器&#xff08;JIT Compiler&#x…

【人工智能】使用Python实现序列到序列(Seq2Seq)模型进行机器翻译

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 序列到序列(Sequence-to-Sequence, Seq2Seq)模型是解决序列输入到序列输出任务的核心架构,广泛应用于机器翻译、文本摘要和问答系统等自然语言处理任务中。本篇文章深入介绍 Seq2Seq 模型的原理及其核心组件(…