代码随想录算法训练营第十四天| 104.二叉树的最大深度 、 111.二叉树的最小深度、 222.完全二叉树的节点个数

104.二叉树的最大深度

在这里插入图片描述

题目链接:二叉树的最大深度
文档讲解:代码随想录
状态:so easy

思路:左子树和右子树中取最大深度,依次往下递归

递归解法:

    public int maxDepth(TreeNode root) {if (root == null) {return 0;} else {return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;}}

迭代解法:

public int bfs(TreeNode root) {// 初始化深度为0int depth = 0;// 使用双端队列Deque来实现BFSDeque<TreeNode> deque = new LinkedList<>();// 如果根节点为空,则直接返回深度0if (root == null) {return depth;}// 将根节点添加到队列的末尾deque.addLast(root);// 当队列不为空时,继续遍历while (!deque.isEmpty()) {// 获取当前层的节点数量int size = deque.size();// 每处理一层,深度加1depth++;// 遍历当前层的所有节点while (size-- > 0) {// 从队列的头部移除一个节点TreeNode node = deque.pollFirst();// 如果左子节点不为空,将其添加到队列的末尾if (node.left != null) {deque.addLast(node.left);}// 如果右子节点不为空,将其添加到队列的末尾if (node.right != null) {deque.addLast(node.right);}}}// 返回计算得到的最大深度return depth;
}

111.二叉树的最小深度

在这里插入图片描述

题目链接:111.二叉树的最小深度
文档讲解:代码随想录
状态:没做出来

思路:和最大深度不同的是,在求最小深度时,需要特别处理那些只有一个子树为空的节点。如果直接使用 Math.min,会错误地计算那些没有左右子树同时存在的路径。

递归解法:

    public int minDepth(TreeNode root) {// 如果根节点为空,树的最小深度为0if (root == null) {return 0;}// 如果左子树为空,则最小深度为右子树的最小深度加1if (root.left == null) {return minDepth(root.right) + 1;}// 如果右子树为空,则最小深度为左子树的最小深度加1if (root.right == null) {return minDepth(root.left) + 1;}// 如果左右子树都不为空,取左右子树中较小的深度加1return Math.min(minDepth(root.left), minDepth(root.right)) + 1;}

迭代解法:

    public int bfs(TreeNode root) {if (root == null) {return 0;}int depth = 0;Deque<TreeNode> deque = new LinkedList<>();deque.addLast(root);while (!deque.isEmpty()) {int size = deque.size();while (size-- > 0) {TreeNode node = deque.pollFirst();depth++;if (node.left != null) {deque.addLast(node.left);}if (node.right != null) {deque.addLast(node.right);}// 如果当前节点是叶子节点,返回当前深度if (node.left == null && node.right == null) {return depth;}}}return depth;}

222.完全二叉树的节点个数

在这里插入图片描述

题目链接:222.完全二叉树的节点个数
文档讲解:代码随想录
状态:还行

递归解法:

public int countNodes(TreeNode root) {// 如果根节点为空,节点总数为0if (root == null) {return 0;}// 如果只有左子树,则计算左子树的节点总数加上当前节点1个. 这段代码也可以不加,因为右子树不存在countNodes(root.right)会返回0
//        if (root.left != null && root.right == null) {
//            return countNodes(root.left) + 1;
//        }// 计算左右子树的节点总数,并加上当前节点1个return countNodes(root.left) + countNodes(root.right) + 1;
}

迭代解法:计数就行

public int countNodes(TreeNode root) {Deque<TreeNode> deque = new LinkedList<>();int i = 0;if (root != null) {deque.addLast(root);i++;}while (!deque.isEmpty()) {int size = deque.size();while (size > 0) {TreeNode node = deque.pollFirst();i++;if (node.left != null) {deque.addLast(node.left);}if (node.right != null) {deque.addLast(node.right);}size--;}}return i;}

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

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

相关文章

【高校科研前沿】新疆生地所陈亚宁研究员团队在GeoSus发文:在1.5°C和2°C全球升温情景下,中亚地区暴露于极端降水的人口增加

目录 文章简介 1.研究内容 2.相关图件 3.文章引用 文章简介 论文名称&#xff1a;Increased population exposures to extreme precipitation in Central Asia under 1.5 ◦C and 2 ◦C global warming scenarios&#xff08;在1.5C和2C全球变暖情景下&#xff0c;中亚地区…

伽马校正技术在AI绘画中的作用

随着人工智能技术的飞速发展&#xff0c;AI绘画已经成为了艺术创作领域的一股新兴力量。在这个数字化时代&#xff0c;计算机图形学和机器学习的结合为我们带来了前所未有的创作工具。然而&#xff0c;为了实现更加真实和自然的色彩表现&#xff0c;伽马校正技术在其中扮演着至…

DP读书:如何使用badge?(开源项目下的标咋用)

最近在冲论坛&#xff0c;很少更一些内容了。但遇到了一个真的有趣的&#xff1a; 开源项目下&#xff0c;蓝蓝绿绿的标是怎么用的呢&#xff1f; 这是我的主页Readme&#xff0c;在看一些NXP的主仓时&#xff0c;突然发现没有这个玩&#xff0c;就自己整了个 再比如我的CSDN专…

Vivado 设置关联使用第三方仿真软件 Modelsim

目录 1.前言2.Vivado 设置关联使用第三方仿真软件 Modelsim 微信公众号获取更多FPGA相关源码&#xff1a; 1.前言 Vivado 软件自带有仿真功能,该功能使用还是比较方便的,初学者可以直接使用自带的仿真功能。 Modelsim仿真工具是Model公司开发的。它支持Verilog、VHDL以及他…

springboot+vue+mybatis房屋租贷系统+PPT+论文+讲解+售后

本论文系统地描绘了整个网上房屋租赁系统的设计与实现&#xff0c;主要实现的功能有以下几点&#xff1a;管理员&#xff1b;首页、个人中心、房屋类型管理、房屋租赁管理、会员管理、订单信息管理、合同信息管理、退房评价管理、管理员管理&#xff0c;系统管理&#xff0c;前…

分布式ID生成方式

1.UUID uuid方式存在问题&#xff1a;占用字节数比较大&#xff1b;ID比较随机&#xff0c;作为MySQL主键写入库时&#xff0c;为了保证顺序性将导致BTree节点分裂比较频繁&#xff0c;影响IO性能。 2.数据库方式 步长step 3&#xff0c;即为机器的数量。 第一台机器&#x…

2024 Q1企业级SSD市场暴涨,国产努力追赶!

在2024年第一季度&#xff0c;由于对高容量存储需求的激增&#xff0c;企业级固态硬盘&#xff08;SSD&#xff09;市场的收入实现了显著增长&#xff0c;达到了37.58亿美元&#xff0c;与上一季度相比增长了62.9%。这一增长主要得益于供应商减产导致的高容量订单需求未得到满足…

大模型高级 RAG 检索策略之混合检索

古人云&#xff1a;兼听则明&#xff0c;偏信则暗&#xff0c;意思是要同时听取各方面的意见&#xff0c;才能正确认识事物&#xff0c;只相信单方面的话&#xff0c;必然会犯片面性的错误。 在 RAG&#xff08;Retrieval Augmented Generation&#xff09;应用中也是如此&…

LeetCode 算法:合并区间c++

原题链接&#x1f517;&#xff1a;合并区间 难度&#xff1a;中等⭐️⭐️ 题目 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰…

Nginx编译安装+nginx模块

一、I/O模型 处理高并发的时候用 1.1I/O模型简介 同步/异步&#xff08;消息反馈机制&#xff09;&#xff1a;关注的是消息通信机制&#xff0c;即调用者在等待一件事情的处理结果时&#xff0c;被调用者是否提供完成状态的通知。 同步&#xff1a;synchronous&#xff0c;…

java第二十课 —— 面向对象习题

类与对象练习题 编写类 A01&#xff0c;定义方法 max&#xff0c;实现求某个 double 数组的最大值&#xff0c;并返回。 public class Chapter7{public static void main(String[] args){A01 m new A01();double[] doubleArray null;Double res m.max(doubleArray);if(res !…

Mysql8安装教程与配置(超详细图文)

MySQL 8.0 是 MySQL 数据库的一个重大更新版本&#xff0c;它引入了许多新特性和改进&#xff0c;旨在提高性能、安全性和易用性。 1.下载MySQL 安装包 注&#xff1a;本文使用的是压缩版进行安装。 &#xff08;1&#xff09;从网盘下载安装文件 点击此处直接下载 &#…

JavaWeb3 Ajax+Axios+Element+Nginx部署

Ajax 异步JS和XML 1.数据交换&#xff1a;给服务器发送请求&#xff0c;并获取服务器相应的数据 2.异步交互&#xff1a;在不重新加载整个页面的情况下&#xff0c;与服务器交换数据并更新部分网页 同步与异步 原生Ajax <!DOCTYPE html> <html> <body><…

Android——热点开关演讲稿

SoftAP打开与关闭 目录 1.三个名词的解释以及关系 Tethering——网络共享&#xff0c;WiFi热点、蓝牙、USB SoftAp——热点(无线接入点)&#xff0c;临时接入点 Hostapd——Hostapd是用于Linux系统的软件&#xff0c;&#xff0c;支持多种无线认证和加密协议&#xff0c;将任…

Java集合的迭代操作,Set Map接口以及工具类方法

1、集合元素迭代 1.1 集合元素遍历 集合的遍历&#xff1a;把集合中的每一个元素获取出来 使用for遍历 使用迭代器遍历 Iterator表示迭代器对象&#xff0c;迭代器中拥有一个指针&#xff0c;默认指向第一个元素之前&#xff0c; . boolean hasNext()&#xff1a;判断指针后是…

任务3.7 开发名片管理系统

本实战项目以Java语言为基础&#xff0c;精心打造了一个功能全面的名片管理系统。系统采用面向对象的设计原则&#xff0c;通过Card类来封装每张名片的详细信息&#xff0c;如姓名、单位、职位和联系电话等&#xff0c;并提供了标准的访问器和修改器方法以确保数据的安全访问。…

ROS学习记录:自定义消息类型

前言 当我们需要传输一些特殊的数据时&#xff0c;且官方的消息包无法满足需求&#xff0c;我们便可以自己定义一个消息类型。 实验步骤 一、在终端输入cd ~/catkin_ws1/src进入工作空间中src目录 二、输入catkin_create_pkg qq_msgs roscpp rospy std_msgs message_generati…

windows10子系统wsl ubuntu22.04下GN/ninja环境搭建

打开windows10子系统 ubuntu22.04 ubuntu22.04: 首先需要 安装ninja $sudo apt install ninja-build $ ninja --version 1.10.0 安装clang $sudo apt install clang $clang --version Ubuntu clang version 14.0.0-1ubuntu1.1安装gn Github: https://github.com/timniederh…

SDXL终于有了足够好的 Openpose 和 Scribble 模型可以使用了。

SDXL终于有了足够好的 Openpose 和 Scribble 模型可以使用了。 xinsir 发布的Openpose 和 Scribble 模型质量相当好&#xff0c;尤其是 Openpose。不过只支持姿态不支持面部。 再加上前几天的 Anyline 线条预处理器和 Canny 模型。SDXL 的生态在发布快一年的时候成熟了。 模…

太阳能语音警示杆在户外的应用及其作用

一、太阳能语音警示杆的主要应用领域 交通管理&#xff1a;在城市道路、乡村公路、高速公路等交通要道&#xff0c;太阳能语音警示杆可以用于提醒驾驶员注意前方路况、减速慢行或者避让施工区域。例如&#xff0c;在临时施工路段&#xff0c;警示杆可以播放“前方施工&#xf…