力扣: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;//树高}
}

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

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

相关文章

VSCode搭建内核源码阅读开发环境

0. 参考链接 使用VSCode进行linux内核代码阅读和开发_vscode阅读linux内核-CSDN博客 1. 搭建Linux内核源码阅读环境 现状&#xff0c;Linux内核源码比较庞大文件非常多&#xff0c;其中又包含的众多的宏定义开关配置选项&#xff0c;这使得阅读内核源代码称为一件头疼的事。 …

11.接口自动化测试-Allure报告(2)

目录 1.如何同时执行多个测试文件2.Allure的不同层级应用Allure报告&#xff1a; 1.如何同时执行多个测试文件 &#xff08;1&#xff09;新建bat文件 &#xff08;2&#xff09;写命令 cd ./testCase pytest -s --alluredir ./report --clean-alluredir allure serve ./repo…

【一竞技DOTA2】双冠王N0tail将发布新书自传《性格胜过天赋》

1、近日Ti双冠王N0tail&#xff0c;在个人推特上宣布将发布自己的自传《性格胜过天赋》。N0tail职业生涯豪夺两届Ti冠军&#xff0c;700万美元个人生涯奖金亦是电竞史最高的传奇选手。 “经过许多年的努力和收到的大量请求&#xff0c;我将发布我的自传新书《性格胜过天赋》&am…

1.PROXY-代理内容

SwitchyOmega&#xff0c;浏览器插件&#xff08;edge&#xff0c;火狐插件库都是存在的&#xff09;&#xff0c;安装后的样式 1.安装 2.设置 我们常用的功能&#xff0c;主要是设置一个代理ip访问学习网站入github等&#xff0c;或者docker服务等 3.启动代理 4.验证 https…

Java测试编程题

题目1 1.创建5个线程对象 线程名设置为&#xff08;Thread01&#xff0c;Thread02&#xff0c;Thread03&#xff0c;Thread04&#xff0c;Thread05&#xff09;使用 代码实现5个线程有序的循环打印&#xff0c;效果如下&#xff1a; Thread01正在打印1 Thread02正在打印2 Threa…

信道的题目

调制信道分为恒参信道和随参信道。恒参信道举例&#xff1a;各种有线信道&#xff1b;中长波地波传播、卫星中继。随参信道举例&#xff1a;短波电离层反射信道、各种散射信道、移动通信信道。狭义信道分为有线信道和无线信道。广义信道包含调制信道和编码信道。调制信道中不包…

Three.js--》探秘虚拟现实VR展厅的视觉盛宴

今天简单实现一个three.js的小Demo&#xff0c;加强自己对three知识的掌握与学习&#xff0c;只有在项目中才能灵活将所学知识运用起来&#xff0c;话不多说直接开始。 目录 项目搭建 初始化three代码 camera-controls控制器使用 添加画框 画框处理事件 添加机器人模型 …

强化网络安全防线,您的等级保护措施到位了吗?

在这个信息化飞速发展的时代&#xff0c;网络安全已经成为我们每个人都需要关注的问题。无论是企业还是个人&#xff0c;我们的工作和生活都越来越依赖于网络。确保网络环境的安全&#xff0c;防止信息泄露和网络攻击&#xff0c;已经成为了一项至关重要的任务。等级保护制度作…

Spring-dataSource事务案例分析-使用事务嵌套时,一个我们容易忽略的地方

场景如下&#xff1a; A_Bean 中的方法a()中调用B_Bean的b();方法都开启了事务&#xff0c;使用的默认的事务传递机制&#xff08;即&#xff1a;属于同一事务&#xff09;&#xff1b; 如下两种场景会存在较大的差异&#xff1a; 在b()方法中出现了异常&#xff0c;在b()中进…

手把手学浪视频怎么保存到本地

很多人在学浪app上面购买了课程,但是并不是所有课程都是永久观看,所以就想要下载下来,进行永久观看 由于很多人都是小白用户,考虑到这一点,我封装成软件,大家不需要考虑视频m3u8地址是怎么获取的、KEY是怎么解密的,只需要掌握工具怎么用 工具我也给大家准备好了,有需要的自己…

java算法day3

移除链表元素设计链表翻转链表两两交换链表中的结点 移除链表元素 ps&#xff1a;有时候感觉到底要不要写特判&#xff0c;你想到了就写&#xff01;因为一般特判有一劳永逸的作用。 解法有两种&#xff0c;一种是不用虚拟头结点&#xff0c;另一种就是用虚拟头结点。 这里我…

【基础IO】谈谈动静态库(怒肝7000字)

文章目录 前言实验代码样例静态库生成一个静态库归档工具ar静态库的链接 动态库创建动态库加载动态库 动静态链接静态链接动态链接动静态链接的优缺点 前言 在软件开发中&#xff0c;库&#xff08;Library&#xff09;是一种方式&#xff0c;可以将代码打包成可重用的格式&…