力扣每日一题day32[104. 二叉树的最大深度]

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

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

示例 1:

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

示例 2:

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

递归法

本题可以使用前序(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序求的是高度。

  • 二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)

  • 二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数或者节点数(取决于高度从0开始还是从1开始)

而根节点的高度就是二叉树的最大深度,所以本题中我们通过后序求的根节点高度来求二叉树最大深度。

我先用后序遍历(左右中)来计算树的高度。

确定递归函数的参数和返回值:参数就是传入树的根节点,返回就返回这棵树的深度,所以返回值为int类型。

代码如下:

int getDepth(TreeNode root)

确定终止条件:如果为空节点的话,就返回0,表示高度为0。

代码如下:

if(root==null) return 0;

确定单层递归的逻辑:先求它的左子树的深度,再求右子树的深度,最后取左右深度最大的数值 再+1 (加1是因为算上当前中间节点)就是目前节点为根节点的树的深度。

代码如下:

int leftDepth=getDepth(root.left);//左
int rightDepth=getDepth(root.right);//右
int depth=1+Math.max(leftDepth,rightDepth);//中
return depth;
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int maxDepth(TreeNode root) {
        return getDepth(root);
    }
    int getDepth(TreeNode root){
        if(root==null) return 0;
        int leftDepth=getDepth(root.left);
        int rightDepth=getDepth(root.right);
        int depth=1+Math.max(leftDepth,rightDepth);
        return depth;
    }
}

使用迭代法的话,使用层序遍历是最为合适的,因为最大的深度就是二叉树的层数,和层序遍历的方式极其吻合。

在二叉树中,一层一层的来遍历二叉树,记录一下遍历的层数就是二叉树的深度,如图所示:

层序遍历

所以这道题的迭代法就是一道模板题,可以使用二叉树层序遍历的模板来解决的。

class Solution {
    public int maxDepth(TreeNode root) {
        if(root==null) return 0;
        int depth=0;
        Queue<TreeNode> queue=new LinkedList<>();
        queue.add(root);
        while(!queue.isEmpty()){
            int size=queue.size();
            depth++;
            for(int i=0;i<size;i++){
                TreeNode cur=queue.poll();
                if(cur.left!=null) queue.add(cur.left);
                if(cur.right!=null) queue.add(cur.right);
            }
        }
        return depth;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

winform中也可以这样做数据展示✨

1、前言 在做winform开发的过程中&#xff0c;经常需要做数据展示的功能&#xff0c;之前一直使用的是gridcontrol控件&#xff0c;今天想通过一个示例&#xff0c;跟大家介绍一下如何在winform blazor hybrid中使用ant design blazor中的table组件做数据展示。 2、效果 先来…

MYSQL练题笔记-子查询-换座位

一、题目相关内容 1&#xff09;相关的表和题目 2&#xff09;帮助理解题目的示例&#xff0c;提供返回结果的格式 二、自己初步的理解 没啥思路&#xff0c;我还没做过交换的这种题&#xff0c;所以我觉得这类交换的题以后值得做一个合集&#xff0c;是有点灵活度在里面的&a…

computed 和 watch 的奇妙世界:让数据驱动你的 Vue 应用(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

海思平台isp之ccm标定

文章目录 1、raw图采集2、ccm标定2.1、标定参数配置2.2、标定效果优化2.2.1、优化方式一2.2.2、优化方式二2.2.3、优化方式三1、raw图采集 raw图采集步骤及标准,请参考文章 《海思平台isp之ccm标定》。2、ccm标定 2.1、标定参数配置 (1)图像基本参数 (2)黑电平设置 (…

VR播控系统深耕VR教学领域,助力开启未来新课堂

作为提升教育质量的技术之一&#xff0c;VR技术已经逐渐成为培养新一代人才、提升教学质量的重要方式&#xff0c;相比于传统教育&#xff0c;VR技术在教学方面的应用&#xff0c;所带来的变化和效果提升都是非常明显的&#xff0c;尤其是VR播控系统的上线&#xff0c;作为VR教…

CDH6.3.2安装

文章目录 [toc]一、CM简介1、ClouderaManager的概念2、ClouderaManager的功能3、ClouderaManager的架构 二、准备清单1、部署步骤2、集群规划3、软件环境准备 三、安装清单1、操作系统iso包2、JDK包3、MySQL包4、CM和CDH包5、部署ansible 四、基础环境准备1、配置网络2、配置ho…

Doris学习笔记

目录 简介 特点 MPP数据库 PB和EB都是用来衡量数据存储量的单位。 秒级响应 Google Mesa Apache Impala 支持标准sql且兼容mysql协议 ROLAP OLAP&#xff08;On-Line Analytical Processing&#xff0c;联机分析处理&#xff09; ROLAP&#xff08;Relational On-Line An…

理解Mysql索引原理及特性

作为开发人员&#xff0c;碰到了执行时间较长的sql时&#xff0c;基本上大家都会说”加个索引吧”。但是索引是什么东西&#xff0c;索引有哪些特性&#xff0c;下面和大家简单讨论一下。 1 索引如何工作&#xff0c;是如何加快查询速度 索引就好比书本的目录&#xff0c;提高数…

智能优化算法应用:基于差分进化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于差分进化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于差分进化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.差分进化算法4.实验参数设定5.算法结果6.…

FTP、U盘等传统数据安全摆渡方法的6个弊端

数据安全摆渡&#xff0c;即数据在不同的网络之间&#xff0c;进行安全流转。做网间隔离的初衷&#xff0c;就是为了保护数据安全&#xff0c;但是在数据摆渡时&#xff0c;除了安全&#xff0c;企业还是需要考虑其他的要素&#xff0c;比如可靠性、易用性、兼容性等等。而传统…

linux 防火墙systemctl (个人笔记)

查看 systemctl status firewalld 开启 systemctl start firewalld 关闭 systemctl stop firewalld.service 查看所有 firewall-cmd --zonepublic --list-ports 开放端口&#xff1a;// --permanent 永久生效,没有此参数重启后失效 firewall-cmd --zonepublic --add-port9527/…

c语言 词法分析器《编译原理》课程设计 文本形式保存

词法分析器的功能输入源程序&#xff0c;按照构词规则分解成一系列单词符号。单词是语言中具有独立意义的最小单位&#xff0c;包括关键字、标识符、运算符、界符和常量等。 (1) 关键字&#xff1a;是由程序语言定义的具有固定意义的标识符。例如begin&#xff0c;end&#xf…

SpringBoot中日志的使用log4j2

SpringBoot中日志的使用log4j2 1、log4j2介绍 Apache Log4j2 是对 Log4j 的升级&#xff0c;它比其前身 Log4j 1.x 提供了重大改进&#xff0c;并提供了 Logback 中可用的许多改 进&#xff0c;同时修复了 Logback 架构中的一些问题&#xff0c;主要有&#xff1a; 异常处理…

GPDB - 高可用特性 - 同步复制与异步复制

GPDB - 高可用特性 - 同步复制与异步复制 GreenPlum是基于PostgreSQL的分布式数据库&#xff0c;master用于接收用户请求并生成执行计划与分发&#xff0c;当然也可以参与计算&#xff1b;而segment则用于存储数据&#xff0c;将计算的结果传递给master。Segment本身具有高可用…

5.4 Linux KickStart 无人值守安装

1、概念介绍 搭建无人执行安装服务器需要从装网络引导安装操作系统&#xff0c;这样我们就可以不必走到机器那里插入CD&#xff0d;ROM光盘或者U盘手动一台一台安装操作系统&#xff0c;使用网络引导批量部署服务器操作系统。 服务架构&#xff1a;PXE DHCP TFTP Kickstar…

dockerfite创建镜像---INMP+wordpress

目录 搭建dockerfile---lnmp 创建nginx镜像 运行 创建数据库镜像 运行 ​编辑 创建php镜像 运行 搭建dockerfile---lnmp 在192.168.10.201 服务IP地址nginx 172.111.0.10 dockernginxmysql172.111.0.20dockermysqlphp172.111.0.30dockerphp 创建nginx镜像 路径 vim /…

python基本数据类型(一)-字符串

1.字符串 字符串就是一系列字符&#xff0c;在Python中&#xff0c;用引号括起的都是字符串&#xff0c;其中的引号可以是单引号&#xff0c;也可以是双引号&#xff0c;如下所示&#xff1a; "This is a string." This is also a string.这种灵活性让你能够在字符…

【产品经理】产品增效项目落地,项目反哺产品成长

产品和项目是相辅相成的关系&#xff0c;产品的规范、成熟&#xff0c;为项目的快速落地提供支撑&#xff0c;项目的落地反哺产品&#xff0c;促进产品的成长成熟。 软件工程的初期是&#xff0c;我们需要什么&#xff0c;就立项项目&#xff0c;通过项目实现需要。 随着项目的…

用实例域代替序数

在Java中&#xff0c;枚举类型的ordinal()方法返回枚举常量的序数&#xff08;即其在枚举声明中的位置&#xff09;。在某些情况下&#xff0c;使用实例域&#xff08;instance field&#xff09;代替序数可能更加安全和易读。以下是一个示例&#xff0c;演示如何使用实例域代替…

低代码开发如何快速构建AI应用

随着人工智能&#xff08;AI&#xff09;的快速发展&#xff0c;越来越多的企业和开发者开始意识到AI在业务和应用中的重要性。然而&#xff0c;AI应用的开发通常被认为是复杂和耗时的过程&#xff0c;需要大量的编码和数据科学知识。为了解决这个问题&#xff0c;低代码开发平…