力扣:104. 二叉树的最大深度(Java,DFS,BFS)

目录

  • 题目描述:
  • 输入:
  • 输出:
  • 代码实现:
    • 1.深度优先搜索(递归)
    • 2.广度优先搜索(队列)

题目描述:

给定一个二叉树 root ,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

在这里插入图片描述

输入:

root = [3,9,20,null,null,15,7]

输出:

3

代码实现:

编写树节点TreeNode

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;
    }
}

1.深度优先搜索(递归)

public class Main{
    public static void main(String[] args) {
        TreeNode root = new TreeNode(3,
                new TreeNode(9), new TreeNode(20,
                new TreeNode(15), new TreeNode(7)));//创建树结点

        System.out.println(maxDepth(root));//3
    }

    /**
     * 递归,深度优先搜索
     *
     * @param root 树的根节点
     * @return 返回最大高度
     */
    public static int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;//空结点直接返回0
        } else {
            return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
            //任意结点都返回:Max(左子树高度,右子树高度)+自身高度1
        }
    }
}

2.广度优先搜索(队列)

import java.util.LinkedList;
import java.util.Queue;

public class Main{
    public static void main(String[] args) {
        TreeNode root = new TreeNode(3,
                new TreeNode(9), new TreeNode(20,
                new TreeNode(15), new TreeNode(7)));//创建树结点

        System.out.println(maxDepth(root));//3
    }

    /**
     * 队列实现广度优先搜索BFS
     *
     * @param root 树的根节点
     * @return 返回最大高度
     */
    public static int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;//空结点直接返回0
        }

        Queue<TreeNode> queue = new LinkedList<>();//创建一个先进先出的队列

        queue.offer(root);//队尾入队:根节点
        int depth = 0;//深度
        while (!queue.isEmpty()) {//队列为空时跳出,即所有元素都出队时
            int size = queue.size();//当前队列长度:即当前每层的节点数
            while (size > 0) {//遍历每一层的每一个结点
                TreeNode node = queue.poll();//取对头元素 并出队
                if (node.left != null) {
                    //当前出队元素存在左子树时
                    queue.offer(node.left);//则左子树结点入队
                }
                if (node.right != null) {
                    //当前出队元素存在右子树时
                    queue.offer(node.right);//右子树结点入队
                }
                size--;//遍历结点数减一
            }
            depth++;//层数加一
        }
        return depth;//树高
    }
}

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

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

相关文章

排序 “壹” 之插入排序

目录 ​编辑 一、排序的概念 1、排序&#xff1a; 2、稳定性&#xff1a; 3、内部排序&#xff1a; 4、外部排序&#xff1a; 二、排序的运用 三、插入排序算法实现 3.1 基本思想 3.2 直接插入排序 3.2.1 排序过程&#xff1a; 3.2.2 代码示例&#xff1a; 3.2.3…

PMP每年考几次,费用如何?

今年的的考试分别分布在3月、6月、8月、11月&#xff0c;一般来说PMP的考试时间是3、6、9、12月&#xff0c;如果有特殊情况PMI也会及时进行调整&#xff0c;具体看他们官网的通知了。 PMP的考试费用全球是统一的&#xff0c;在国内考试报名费用是3900元&#xff0c;如果考试没…

JVM类加载基本流程及双亲委派模型

1.JVM内存区域划分 一个运行起来的Java进程就是一个JVM虚拟机&#xff0c;这就需要从操作系统中申请一片内存区域。JVM申请到内存之后&#xff0c;会把这个内存划分为几个区域&#xff0c;每个区域都有各自的作用。 一般会把内存划分为四个区域&#xff1a;方法区(也称 "…

在PostgreSQL中,如何创建一个触发器并在特定事件发生时执行自定义操作?

文章目录 解决方案示例代码1. 创建自定义函数2. 创建触发器 解释 在PostgreSQL中&#xff0c;触发器&#xff08;trigger&#xff09;是一种数据库对象&#xff0c;它能在特定的事件&#xff08;如INSERT、UPDATE或DELETE&#xff09;发生时自动执行一系列的操作。这些操作可以…

基于SSM,JSP超市进销存管理系统

目录 项目介绍 图片展示 运行环境 获取方式 项目介绍 权限划分&#xff1a;用户管理员 用户&#xff1a; 登录&#xff0c;注销&#xff0c;查看基本信息&#xff0c;修改基本信息 进货管理&#xff1a; 进货信息&#xff1a;可以新增进货&#xff0c;查询进货&#xff0…

GRAF: Generative Radiance Fields for 3D-Aware Image Synthesis

GRAF: Generative Radiance Fieldsfor 3D-Aware Image Synthesis&#xff08;基于产生辐射场的三维图像合成&#xff09; 思维导图&#xff1a;https://blog.csdn.net/weixin_53765004/article/details/137944206?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3…

突破速率界限:800G光模块的兴起

在以ChatGPT和NVIDIA DGX H200为代表的技术取得显著进步的时代&#xff0c;人工智能行业同样表现出明显地提升。除此之外&#xff0c;一项改变传统规则的创新出现了&#xff1a;800G光模块。这类优质的设备预示着数据传输和接收领域的变革性转变&#xff0c;成功引起了人们的兴…

【系统架构师】-案例考点(一)

1、软件架构设计 主要考点&#xff1a; 质量属性、软件架构风格、软件架构评估、MVC架构、面向服务的SOA架构、 DSSA、ABSD 1.1、质量属性 1、性能:指系统的响应能力&#xff0c;即要经过多长时间才能对某个事件做出响应&#xff0c;或者在某段时间内系统所能处理的事件的…

利用AQS(AbstractQueuedSynchronizer)实现一个线程同步器

目录 1. 前言 2. 什么是同步器 3. 同步器实现思路 Semaphore(信号量) 4. 代码实现 4.1. 创建互斥锁类 4.2 编写静态内部类&#xff0c;继承AQS 4.3 内部类实现AQS钩子函数 4.3 封装lock&#xff0c;unlock方法 4.4. 测试 5. 总结 本文章源码仓库&#xff1a;Conc…

FPGA - 基于自定义AXI FULL总线的PS和PL交互

前言 在FPGA - ZYNQ 基于Axi_Lite的PS和PL交互中&#xff0c;介绍了基于基于AXi_Lite的PL和PS交互&#xff0c;接下来构建基于基于Axi_Lite的PS和PL交互。 AXI_GP、AXI_HP和AXI_ACP接口 首先看一下ZYNQ SoC的系统框图&#xff0c;如下图所示。在图中&#xff0c;箭头方向代表…

Python 中整洁的并行输出

原文&#xff1a;https://bernsteinbear.com/blog/python-parallel-output/ 代码&#xff1a;https://gist.github.com/tekknolagi/4bee494a6e4483e4d849559ba53d067b Python 并行输出 使用进程和锁并行输出多个任务的状态。 注&#xff1a;以下代码在linux下可用&#xff0c…

Tcpdump -r 解析pcap文件

当我们使用命令抓包后&#xff0c;想在命令行直接读取筛选怎么办&#xff1f;-r参数就支持了这个 当你使用 tcpdump 的 -r 选项读取一个之前捕获的数据包文件&#xff0c;并想要筛选指定 IP 地址和端口的包时&#xff0c;你可以在命令中直接加入过滤表达式。这些过滤表达式可以…

数据可视化(六):Pandas爬取NBA球队排名、爬取历年中国人口数据、爬取中国大学排名、爬取sina股票数据、绘制精美函数图像

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

基于ThinkPHP框架开发的的站长在线工具箱网站PHP源码(可以作为流量站)

这是一套基于ThinkPHP框架开发的站长在线工具箱网站PHP源码&#xff0c;包含了多种在线工具&#xff0c;可以作为流量站使用。 项 目 地 址 &#xff1a; runruncode.com/php/19742.html 部署教程&#xff1a; 环境要求&#xff1a; - PHP版本需要大于等于7.2.5 - MySQL版…

element-ui合计逻辑踩坑

element-ui合计逻辑踩坑 1.快速实现一个合计 ​ Element UI所提供的el-table中提供了方便快捷的合计逻辑实现&#xff1a; ​ https://element.eleme.cn/#/zh-CN/component/table ​ 此实现方法在官方文档中介绍详细&#xff0c;此处不多赘述。 ​ 这里需要注意&#xff0c…

设备连接IoT云平台指南

一、简介 设备与IoT云间的通讯协议包含了MQTT&#xff0c;LwM2M/CoAP&#xff0c;HTTP/HTTP2&#xff0c;Modbus&#xff0c;OPC-UA&#xff0c;OPC-DA。而我们设备端与云端通讯主要用的协议是MQTT。那么设备端与IoT云间是如何创建通信的呢&#xff1f;以连接华为云IoT平台为例…

React中redux、react-redux、@reduxjs/toolkit状态管理库的使用方式

效果 下载依赖 npm install redux react-redux reduxjs/toolkit --save在src目录下创建文件 创建index.ts文件 import { configureStore } from reduxjs/toolkit import userSlice from ./userReducerconst store configureStore({reducer: {user: userSlice.reducer} }) //…

java实现识别图片上的文字(OCR识别身份证等证件信息)

利用第三方jar包&#xff0c;实现识别图片上的文字。第三方支持地址&#xff1a;Spire.OCR for Java | 专业的图文识别组件&#xff0c;用以读取图片格式中的文本Spire.OCR for Java 是专为 Java 开发者设计的强大OCR库&#xff0c;提供高效的文字识别功能&#xff0c;能够从图…

储存器的专有名词辨析

位&#xff1a;存放一个二进制位字节&#xff1a;8位存放一个二进制数储存单元&#xff1a;一个八位的储存器&#xff0c;叫做一个储存单元储存单元地址&#xff1a;储存单元唯一的固定编号储存单元数据&#xff1a;存放于储存单元的数字储存单元容量&#xff1a;一排能储存单元…

imx6ull设备树

概念 什么是设备树 描述设备树的文件叫DTS&#xff0c;实际上就是在这个DTS文件里面&#xff0c;用树状的结构存储设备之间的关系。在以前这棵树就是设备树。 什么是DTS、DTB、DTC DTS就是我们上面的设备树源码文件、DTB是它的二进制文件、DTC是我们编译DTS的工具&#xff…