代码学习记录14

随想录日记part14

t i m e : time: time 2024.03.07



主要内容:今天的主要内容是二叉树的第三部分,主要涉及二叉树最大深度;二叉树最小深度;完全二叉树的节点个数。

  • 104.二叉树的最大深度
  • 111.二叉树的最小深度
  • 222.完全二叉树的节点个数


Topic1二叉树的最大深度

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

示例:
请添加图片描述

输入: r o o t = [ 3 , 9 , 20 , n u l l , n u l l , 15 , 7 ] root = [3,9,20,null,null,15,7] root=[3,9,20,null,null,15,7]
输出: 3 3 3

思路: 这道题目比较简答采用递归和迭代来实现:
下面给出两种的写法:

class Solution {public int maxDepth(TreeNode root) {// 递归法if (root == null)return 0;// 递归出口// 单层递归逻辑int left = maxDepth(root.left);int right = maxDepth(root.right);if (left >= right)return left + 1;elsereturn right + 1;}
}class Solution {public int maxDepth(TreeNode root) { 使用层序遍历进行迭代法if(root==null)return 0;Deque<TreeNode> queue = new LinkedList<>();int deep=0;queue.add(root);while(!queue.isEmpty()){deep++;//记录深度int te=queue.size();for(int i=0;i<te;i++){TreeNode tem=queue.poll();if(tem.left!=null)queue.add(tem.left);if(tem.right!=null)queue.add(tem.right);}}return deep;}
}


Topic2二叉树的最小深度

题目: 给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
示例:请添加图片描述

输入: r o o t = [ 3 , 9 , 20 , n u l l , n u l l , 15 , 7 ] root = [3,9,20,null,null,15,7] root=[3,9,20,null,null,15,7]
输出: 2 2 2

思路: 整个树的翻转主要有两种思路:

  • 递归
  • 迭代
  • 递归法:写好递归是要有三个关键点注意的:
    1.确定参数和返回值
int minDepth(TreeNode root);

2.确定中止条件

 if (root == null) return 0;

3.确定单层递归逻辑,这里的递归逻辑得注意

		int left = minDepth(root.left);int right = minDepth(root.right);//这里的单层循环处理注意if (root.left == null && root.right != null)return right + 1;if (root.left != null && root.right == null)return left + 1;if (left >= right)return right + 1;elsereturn left + 1;

完整的 j a v a java java 代码如下:

class Solution {public int minDepth(TreeNode root) {//递归法if (root == null)return 0;int left = minDepth(root.left);int right = minDepth(root.right);//这里的单层循环处理注意if (root.left == null && root.right != null)return right + 1;if (root.left != null && root.right == null)return left + 1;if (left >= right)return right + 1;elsereturn left + 1;}
}

  • 迭代法:能够使用队列来实现:
    如下面代码实现:
class Solution {public int minDepth(TreeNode root) {// 使用层序遍历实现迭代法if (root == null)return 0;Deque<TreeNode> queue = new LinkedList<>();int deep = 0;queue.add(root);while (!queue.isEmpty()) {deep++;// 记录深度int te = queue.size();for (int i = 0; i < te; i++) {TreeNode tem = queue.poll();if (tem.left != null)queue.add(tem.left);if (tem.right != null)queue.add(tem.right);if (tem.left == null && tem.right == null)//当前节点的左右节点都为空,其为叶子节点return deep;}}return deep;}
}


Topic3完全二叉树的节点个数

题目: 给你一棵 完全二叉树 的根节点 r o o t root root ,求出该树的节点个数。完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h h h 层,则该层包含 1 1 1 ~ 2 h 2^h 2h 个节点。
示例:
请添加图片描述

输入: r o o t = [ 1 , 2 , 3 , 4 , 5 , 6 ] root = [1,2,3,4,5,6] root=[1,2,3,4,5,6]
输出: 6 6 6

思路:

递归法:

class Solution {public int countNodes(TreeNode root) {//递归法if(root==null)return 0;int left=countNodes(root.left);int right=countNodes(root.right);return left+right+1;}
}

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( l o g n ) O(logn) O(logn),算上了递归系统栈占用的空间

迭代法:

代码实现如下:

class Solution {public int countNodes(TreeNode root) {// 迭代法if (root == null)return 0;int count = 0;Deque<TreeNode> queue = new LinkedList<>();queue.add(root);while (!queue.isEmpty()) {count++;TreeNode tem = queue.poll();if (tem.left != null)queue.add(tem.left);if (tem.right != null)queue.add(tem.right);}return count;}
}

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)

-完全二叉树
请添加图片描述
完全二叉树只有两种情况,情况一:就是满二叉树,情况二:最后一层叶子节点没有满。
对于情况一,可以直接用 2 树深度 − 1 2^{树深度} - 1 2树深度1 来计算,注意这里根节点深度为 1 1 1
对于情况二,分别递归左孩子,和右孩子,递归到某一深度一定会有左孩子或者右孩子为满二叉树,然后依然可以按照情况 1 1 1 来计算。请添加图片描述

请添加图片描述

完全二叉树中,如果递归向左遍历的深度等于递归向右遍历的深度,那说明就是满二叉树。请添加图片描述
其完整的Java代码如下:

ass Solution {public int countNodes(TreeNode root) {// 利用完整二叉树的性质// 递归出口if (root == null)return 0;// 单层递归的逻辑TreeNode left = root.left;TreeNode right = root.right;int leftdepth = 0;int rightdepth = 0;while (left != null) {left = left.left;leftdepth++;}while (right != null) {right = right.right;rightdepth++;}if (leftdepth == rightdepth) {return (2 << leftdepth) - 1;}return 1 + countNodes(root.left) + countNodes(root.right);}
}

时间复杂度: O ( l o g n × l o g n ) O(log\ n × log\ n) O(log n×log n)
空间复杂度: O ( l o g n ) O(log\ n) O(log n)

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

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

相关文章

Jmeter基础使用---Token鉴权接口关联

接口测试流程&#xff1a; 查看API接口文档&#xff0c;熟悉接口业务&#xff08;地址、端口、参数、鉴权、状态码&#xff09;设计接口测试用例&#xff08;正例&#xff1a;正确的结果&#xff1b;反例&#xff1a;鉴权异常、参数异常、兼容异常、其他异常&#xff09;使用接…

受投资人青睐,易鑫租赁深交所再发8.10亿ABS,利率再创新低

近日&#xff0c;上海易鑫融资租赁有限公司&#xff08;以下简称“易鑫租赁”&#xff09;成功发行“天风-易鑫租赁惠民4期资产支持专项计划”&#xff0c;募集资金8.10亿元&#xff08;人民币&#xff0c;下同&#xff09;。此次发行利率再创易鑫ABS历史新低。 2023年1月&…

windows安装程序无法将windows配置为此计算机

目录 问题描述 问题原因 解决办法 方法一 方法二 方法三&#xff1a; 问题描述 重装系统时显示windows安装程序无法将windows配置在此计算机硬件上. 问题原因 安装介质已损坏 如果可引导的安装介质&#xff08;如DVD或USB驱动器&#xff09;损坏或损坏&#xff0c;安装过…

17-Java解释器模式 ( Interpreter Pattern )

Java解释器模式 摘要实现范例 解释器模式&#xff08;Interpreter Pattern&#xff09;实现了一个表达式接口&#xff0c;该接口解释一个特定的上下文 这种模式被用在 SQL 解析、符号处理引擎等 解释器模式提供了评估语言的语法或表达式的方式&#xff0c;它属于行为型模式 …

buildadmim生成代码时让菜单有层级

当我们使用buildadmin生成代码的时候&#xff0c;在菜单的部分&#xff0c; 有时希望它生的是一个带有层级的菜单&#xff0c;有时候则想生成一个没有层级的菜单 like this 经过本人测试 如果我们要生成没有层级的菜单 我们可以在高级设置中的 相对位置处更改&#xff0c;同时…

使用java批量写入环境变量

环境需求 jdk版本&#xff1a;1.8 jna依赖&#xff1a; <dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>5.10.0</version></dependency><dependency><groupId>net.java.…

ServletContext

ServletContext 1.共享数据 ServletContext servletContext this.getServletContext(); String username "徐凤年"; servletContext.setAttribute("username",username);ServletContext servletContext this.getServletContext(); String username (…

因果学习篇(2)-Causal Attention for Vision-Language Tasks(文献阅读)

Causal Attention for Vision-Language Tasks 引言 这篇论文是南洋理工大学和澳大利亚莫纳什大学联合发表自2021年的CVPR顶会上的一篇文献&#xff0c;在当前流行的注意力机制中增加了因果推理算法&#xff0c;提出了一种新的注意力机制&#xff1a;因果注意力(CATT)&#xff…

航芯防护组合拳「MCU+安全」,让数字资产加倍安全!

在这个万物互联的时代&#xff0c;数据安全的“飓风”正在袭来。随着集成电路的广泛应用&#xff0c;安全问题也日益凸显。从芯片漏洞到硬件攻击&#xff0c;这些问题都给集成电路的应用带来了严峻的挑战。一旦安全防线被突破&#xff0c;智能设备的数字资产安全将面临威胁。 …

电动自行车易着火的启示

电动自行车起火情况不时发生&#xff0c;上海雷卯EMC小哥分析原因&#xff0c;或许对您有所启示。 电动自行车容易发生起火的原因可能是由于电池管理系统&#xff08;BMS&#xff09;的保护功能不足或者电池质量问题导致的。要改进BMS的保护功能以减少火灾风险&#xff0c; 可…

【CSP】201403-3-命令行选项

CSP-201403-3-命令行选项 关键点&#xff1a;将整行字符串按空格分割 在解析命令行时&#xff0c;一个常见的需求是将整个命令行字符串分割成多个部分&#xff0c;通常以空格为分隔符。这些部分包括命令行工具的名称、选项&#xff08;可能带有前缀-或--&#xff09;和这些选项…

mongodb 图形界面工具 -- Studio 3T(下载、安装、连接mongodb数据库)

目录 mongodb 图形界面工具 -- Studio 3T下载安装第一次使用&#xff1a;注册添加一个连接&#xff08;连接 mongodb 数据库&#xff09;1、点击【添加新连接】&#xff0c;选择【手动配置我的连接设置】2、对 Server 设置连接数据3、连接的用户认证设置&#xff08;创建数据库…

航芯1-Wire安全认证新品上市,防抄板和耗材认证高性价比之选

随着用户产品附加值提升带来的对防抄板的需求&#xff0c;以及电池、医疗耗材、电子配件、IOT领域中对设备认证的需求&#xff0c;上海航芯经过多年的技术积累和对市场的理解&#xff0c;推出了高性价比的ACL16_Axx系列。 1-Wire单总线&#xff1a;小尺寸实现高效传输 ACL16_…

JAVA WEB开发 错误:无效发行版解决办法

1.首先查询本安装的jdk版本 在cmd中输入如下指令 2.打开file——progect structure 2.将这两处保持一致即可

一图看懂:什么是“新质生产力”?

◆2023年9月&#xff0c;首次提出“新质生产力”。 ◆2024年1月&#xff0c;强调“加快发展新质生产力&#xff0c;扎实推进高质量发展”。 ◆2024年3月&#xff0c;《政府工作报告》中提出&#xff0c;要大力推进现代化产业体系建设&#xff0c;加快发展新质生产力。充分发挥…

SpringBoot【问题 05】PostgreSQL数据库启用SSL后使用默认配置进行数据库连接(Navicat工具与Java程序)

官网SSL说明&#xff1a;https://www.postgresql.org/docs/9.1/libpq-ssl.html 1.配置 1.1 文件 使用SSL需要的4个文件&#xff0c;名称要一致&#xff1a; 客户端密钥&#xff1a;postgresql.keyJava客户端密钥&#xff1a;postgresql.pk8客户端证书&#xff1a;postgresq…

阿里云2核4G服务器支持人数并发测试,2核4G主机测评

阿里云2核4G服务器多少钱一年&#xff1f;2核4G配置1个月多少钱&#xff1f;2核4G服务器30元3个月、轻量应用服务器2核4G4M带宽165元一年、企业用户2核4G5M带宽199元一年。可以在阿里云CLUB中心查看 aliyun.club 当前最新2核4G服务器精准报价、优惠券和活动信息。 阿里云官方2…

进制之间的转换

文章目录 编译过程进制转换1、进制的概念1.1 二进制1.2 八进制1.3 十六进制 进制在程序中的表现方式十进制转二进制将十进制转换成二进制&#xff08;除2反序取余法&#xff09;二进制转十进制&#xff08;权值法&#xff09; 八进制转十进制将十进制转换成八进制(除8反序取余法…

医药行业五大难题深度剖析:CRM解决方案助力突围

医疗行业关系着民生、经济乃至战备&#xff0c;是国民经济的重要组成部分。虽然近20年来我国医疗行业年均增长率维持在15%之上&#xff0c;但行业发展仍存在诸多问题。引进CRM管理系统可能是一个行之有效的解决方法。文中将为您整理医疗行业目前的五大挑战&#xff0c;以及CRM如…

Android Termux系统安装openssh实现公网使用SFTP远程访问

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP&#xff08;SSH File Transfer Protocol&#xff09;是一种基于SSH&#xff08;Secure Shell&#xff09;安全协议的文件传输协议。与FTP协议相比&#xff0c;SFTP使用了…