怎样建设微网站首页/微信社群营销怎么做
✨✨欢迎大家来到Celia的博客✨✨
🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉
所属专栏:OJ题
个人主页:Celia's blog~
目录
编辑
单值二叉树
题目描述 OJ-单值二叉树
解题思路
代码实现
二叉树的最大深度
题目描述 OJ-二叉树的最大深度
解题思路
代码实现
检查两棵树是否相同
题目描述 OJ-相同的树
解题思路
代码实现
对称二叉树
题目描述 OJ-对称二叉树
解题思路
代码实现
另一颗树的子树
题目描述 OJ-另一颗树的子树
解题思路
代码实现
翻转二叉树
题目描述 OJ-翻转二叉树
解题思路
代码实现
平衡二叉树
题目描述 OJ-平衡二叉树
解题思路
代码实现
单值二叉树
-
题目描述 OJ-单值二叉树
- 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。
- 只有给定的树是单值二叉树时,才返回
true
;否则返回false
。
-
解题思路
本题的核心是判断左右子树的val的值是否和主干的val相等。
- 若节点为空,则返回true。
- 若不相等,返回false。
- 如果这两个条件都不满足,则递归判断左右子树。
该题调用的函数参数只有一个二叉树节点指针。为了方便起见,可以额外写一个子函数来进行递归,子函数的参数为二叉树节点指针root和该节点的值val。

(绿色数字为执行顺序)

(绿色数字执行顺序)
-
代码实现
bool _isUnivalTree(struct TreeNode* root,int val)
{if(root == NULL)return true;if(root->val != val)return false;return _isUnivalTree(root->left,val) && _isUnivalTree(root->right,val);
}
bool isUnivalTree(struct TreeNode* root)//系统调用的函数
{return _isUnivalTree(root,root->val);
}
二叉树的最大深度
-
题目描述 OJ-二叉树的最大深度
- 给定一个二叉树
root
,返回其最大深度。- 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
-
解题思路
本题的关键在于,该树的深度为左右子树中最大的深度。
- 如果传入的节点为空,则返回0。
- 如果节点不为空,则递归计算左右两个子树的深度,并且定义两个整型变量记录下来。
- 最后返回左右子树深度中值最大的一个。

(绿色数字执行顺序)
-
代码实现
int maxDepth(struct TreeNode* root) {if(root == NULL)return 0;int l = maxDepth(root->left);int r = maxDepth(root->right);return l > r ? l + 1 :r + 1;
}
在这里要注意一定要用两个变量接收左右子树的深度,不可以将递归函数写在三目运算符中:
return maxDepth(root->left) > maxDepth(root->right) ? maxDepth(root->left) + 1 : rmaxDepth(root->right) + 1;
上面的写法会导致过多的重复运算,严重拖慢了运行时间。
检查两棵树是否相同
-
题目描述 OJ-相同的树
- 给你两棵二叉树的根节点
p
和q
,编写一个函数来检验这两棵树是否相同。- 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
-
解题思路
- 如果传入的节点都为空,则返回true。
- 如果只有其中一个为空,另一个不为空,则返回false。
- 如果传入的节点都不为空,但是这两颗树当前节点值不同,返回false。
- 递归遍历两个左右子树,左子树和左子树比较,右子树和右子树比较,返回两个递归逻辑与的结果。
-
代码实现
bool isSameTree(struct TreeNode* p, struct TreeNode* q)
{if(p == NULL && q == NULL)return true;if(p == NULL || q == NULL)return false;if(p->val != q->val)return false;return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);
}
对称二叉树
-
题目描述 OJ-对称二叉树
- 给你一个二叉树的根节点
root
, 检查它是否轴对称。
-
解题思路
这道题和 OJ-相同的树 思路是一样的,唯一需要改变的地方为相同的树是相同方向的树进行比较,而本题是不同方向的树进行比较。
-
代码实现
bool _isSymmetric(struct TreeNode* r1,struct TreeNode* r2)
{if(r1 == NULL && r2 == NULL)return true;if(r1 == NULL || r2 == NULL)return false;if(r1->val != r2->val)return false;return _isSymmetric(r1->right,r2->left) && _isSymmetric(r1->left,r2->right);
}
bool isSymmetric(struct TreeNode* root)
{return _isSymmetric(root->left,root->right);
}
另一颗树的子树
-
题目描述 OJ-另一颗树的子树
- 给你两棵二叉树
root
和subRoot
。检验root
中是否包含和subRoot
具有相同结构和节点值的子树。如果存在,返回true
;否则,返回false
。- 二叉树
tree
的一棵子树包括tree
的某个节点和这个节点的所有后代节点。tree
也可以看做它自身的一棵子树。
-
解题思路
- 本题提供的subRoot树一定为非空,那么如果传入的root节点为空,则一定不包含子树,返回false。
- 先判断subRoot树和root树的当前节点的值是否相同,若相同,检查以当前节点为根节点的树是否为subRoot树,如果是,返回true。
- 以左右子树为根节点递归左右子树,返回它们逻辑或的结果。(左右只要含有子树就符合题意)
-
代码实现
本题用到了 OJ-相同的树 的代码。
bool isSameTree(struct TreeNode* p, struct TreeNode* q)
{if(p == NULL && q == NULL)return true;if(p == NULL || q == NULL)return false;if(p->val != q->val)return false;return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);
}
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot)
{if(root == NULL)return false;if(root->val == subRoot->val && isSameTree(root,subRoot))return true;return isSubtree(root->left,subRoot) || isSubtree(root->right,subRoot);}
翻转二叉树
-
题目描述 OJ-翻转二叉树
- 给你一棵二叉树的根节点
root
,翻转这棵二叉树,并返回其根节点。
-
解题思路
- 如果传入的节点为空,返回NULL。
- 如果传入的节点非空,则交换左右子树节点的值。
- 递归调用左右子树。
- 返回根节点。
-
代码实现
struct TreeNode* invertTree(struct TreeNode* root)
{if(root == NULL)return NULL;struct TreeNode* tmp = root->right;root->right = root->left;root->left = tmp;invertTree(root->left);invertTree(root->right);return root;
}
平衡二叉树
-
题目描述 OJ-平衡二叉树
- 给定一个二叉树,判断它是否是 平衡二叉树。
- 平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1。
-
解题思路
- 如果传入的节点为空,返回true。
- 定义两个变量,记录当前节点的左右子树的深度,并求出左右子树相差的绝对值。
- 若绝对值大于1,返回false。
- 递归调用左右子树,返回它们逻辑与的结果(左右两边都必须平衡)。
-
代码实现
本题用到了 OJ-二叉树的最大深度 的代码。
int TreeHeight(struct TreeNode* root)
{if(root == NULL)return 0;int r = TreeHeight(root->left);int r1 = TreeHeight(root->right);return r1 > r ? r1 + 1 : r + 1;
}
bool isBalanced(struct TreeNode* root)
{if(root == NULL)return true;int leftHeight = TreeHeight(root->left);int rightHeight = TreeHeight(root->right);int size = abs(leftHeight - rightHeight);//求绝对值if(size > 1)return false;return isBalanced(root->left) && isBalanced(root->right);
}
相关文章:

【OJ】二叉树相关OJ题
✨✨欢迎大家来到Celia的博客✨✨ 🎉🎉创作不易,请点赞关注,多多支持哦🎉🎉 所属专栏:OJ题 个人主页:Celias blog~ 目录 编辑 单值二叉树 题目描述 OJ-单值二叉树 解题思路 …...

Blender中保存透明图片
在Blender中保存透明图片,主要是通过在渲染设置中调整背景透明度,并选择合适的文件格式来保存图像。以下是一个详细的步骤指南: 一、设置渲染属性 打开Blender并加载你想要渲染的模型。在右侧的属性编辑器中,找到并点击“渲染属…...

MySQL之索引优化
1、在进行查询时,索引列不能是表达式的一部分,也不能是函数的参数,否则无法使用索引 例如下面的查询不能使用 actor_id 列的索引: #这是错误的 SELECT actor_id FROM sakila.actor WHERE actor_id 1 5; 优化方式:…...

Spring Boot 与 Amazon S3:快速上传与下载文件的完整指南
概要 在将 Spring Boot 更新到 3 系列时,由于 javax 需要被替换为 jakarta,因此原先依赖于 javax 的 spring-cloud-starter-aws1 将无法使用(虽然在我本地环境中仍然可以正常工作)。为了确保兼容性,我将依赖关系更改为…...

细节剖析:HTTP与HTTPS在安全性、性能等方面的不同!
HTTPS是现代互联网通信的重要基石,通过加密通信、身份验证和数据完整性保护,为数十亿用户提供了安全可靠的互联网体验。 小编整理了2GB程序员相关资料,关注微信公众号“程序员Style”回复“程序员”免费领取! 1、介绍 随着 HTT…...

MySQL面试篇章——MySQL索引
文章目录 MySQL 索引索引分类索引创建和删除索引的执行过程explain 查看执行计划explain 结果字段分析 索引的底层实现原理B-树B树哈希索引 聚集和非聚集索引MyISAM(\*.MYD,*.MYI)主键索引辅助索引(二级索引) InnoDB&a…...

WSL 2 Oracle Linux 9.1 安装配置
文章目录 环境使用体验安装 Oracle Linux 9.1修改默认存储路径默认 root 用户登录启用 systemd启用 SSH 连接WSL 无法 ping 通宿主机和域名WSL 使用主机代理(测试通过)WSL 常用命令 环境 OS:Win11 24H2 (OS 内部版本26120.1252) wsl --versio…...

MySQL日志文件详解
MySQL中的日志文件是MySQL数据库系统的重要组成部分,它们记录了数据库的运行情况、用户操作、错误信息等,对于数据库的维护、优化、故障排查和恢复都具有重要意义。以下是MySQL中几种主要日志文件的详解: 1. 二进制日志(Binary L…...

MySQL零散拾遗(三)
在mysql中,JOIN ON 和 WHERE 的作用和用法是怎么样的? 在MySQL中,JOIN语句用于将两个或多个表根据指定的关联条件合并成一个新的结果集。JOIN ON和WHERE子句在JOIN语句中扮演着不同的角色,它们的用法和作用如下: JOI…...

鸿蒙 使用 Refresh 实现下拉刷新
import promptAction from ohos.promptActionEntry Component struct Index {Staterefreshing: boolean falseStatelist: number[] Array(20).fill(Date.now())Buildercontent(){Stack(){Row(){LoadingProgress().height(32)Text(正在刷新...).fontSize(16).margin({left:20}…...

【JavaScript 算法】图的遍历:理解图的结构
🔥 个人主页:空白诗 文章目录 一、深度优先搜索(DFS)深度优先搜索的步骤深度优先搜索的JavaScript实现 二、广度优先搜索(BFS)广度优先搜索的步骤 三、应用场景四、总结 图的遍历是图论中的基本操作之一&am…...

Ubuntu 中默认的 root 用户密码
场景:想要切换root用户,发现得输入密码,以为是以前设置过然后一直尝试都是错误【认证失败】最后发现根本没设置过root用户,默认会随机生成root用户的密码😅 Ubuntu 中默认的 root 密码是随机的,即每次开机都…...

Rust编程-高级特性
unsafe:内存不安全 内存安全问题,例如空指针解引用 关键字unsafe来切换到不安全模式,并在被标记后的代码块中使用不安全代码 使用unsafe告诉编译器后面代码安全性自行负责 因为电脑硬件安全问题,必须编写可能不安全的代码 可以将…...

JavaRegexImprove练习(1) (2024.7.22)
ImproveExercise1 package RegexImprove20240722; import java.util.Scanner; public class ImproveExercise {public static void main(String[] args) {Scanner sc new Scanner(System.in);System.out.println("请输入一个字符串");String str sc.nextLine();//…...

基于YOLO模型的鸟类识别系统
鸟类识别在生物研究和保护中具有重要意义。本文将详细介绍如何使用YOLO(You Only Look Once)模型构建一个鸟类识别系统,包括UI界面、YOLOv8/v7/v6/v5代码以及训练数据集。 目录 2. 环境配置 2.1 安装Python和相关库 2.2 安装YOLO模型库 …...

WebRTC通话原理(SDP、STUN、 TURN、 信令服务器)
文章目录 1.媒体协商SDP简介 2.网络协商STUN的工作原理TURN工作原理 3.信令服务器信令服务器的主要功能信令服务器的实现方式 1.媒体协商 比如下面这个例子 A端与B端要想通信 A端视频采用VP8做解码,然后发送给B端,B端怎么解码? B端视频采用…...

面试场景题系列--(1)如果系统的 QPS 突然提升 10 倍该怎么设计?--xunznux
1. 如果系统的 QPS 突然提升 10 倍该怎么设计? 1.1 硬件的扩展微服务的拆分 如果所有的业务包括交易系统、会员信息、库存、商品等等都夹杂在一起,当流量一旦起来之后,单体架构的问题就暴露出来了,机器挂了所有的业务就全部无法…...

【数学建模】——前沿图与网络模型:新时代算法解析与应用
目录 1.图与网络的基本概念 1. 无向图和有向图 2. 简单图、完全图、赋权图 3. 顶点的度 4. 子图与图的连通性 2.图的矩阵表示 1. 关联矩阵 2. 邻接矩阵 3.最短路问题 1.Dijkstra 算法 2.Floyd 算法 4.最小生成树问题 1.Kruskal 算法 2.Prim 算法 5.着色问题 6.…...

视频分帧【截取图片】(YOLO目标检测【生成数据集】)
高效率制作数据集【按这个流程走,速度很顶】 本次制作,1059张图片【马路上流动车辆】 几乎就是全自动了,只要视频拍得好,YOLO辅助制作数据集就效率极高 视频中的图片抽取: 【由于视频内存过大,遇到报错执行…...

Redis7(二)Redis持久化双雄
持久化之RDB RDB的持久化方式是在指定时间间隔,执行数据集的时间点快照。也就是在指定的时间间隔将内存中的数据集快照写入磁盘,也就是Snapshot内存快照,它恢复时再将硬盘快照文件直接读回到内存里面。 RDB保存的是dump.rdb文件。 自动触发…...

发布支持TS的npm包
你现在有这么一个包,已经将他发布在npm上了,周下载量也还比较可观。美中不足的就是,这个包之前使用js写的,现在你想增加TS类型,提升用户使用体验,那么你现在可以做以下几个步骤 1.在你的包的根目录下创建一…...

计算机视觉9 全卷积网络
全卷积网络(Fully Convolutional Network,简称 FCN)在计算机视觉领域具有重要地位。 传统的卷积神经网络(CNN)在最后的输出层通常使用全连接层来进行分类任务。然而,全连接层会丢失空间信息,使得…...

02.C++入门基础(下)
1.函数重载 C支持在同一作用域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者类型不同。这样C函数调用就表现出了多态行为,使用更灵活。C语言是不支持同一作用域中出现同名函数的。 1、参数类型不同 2、参数个数不同…...

【数据结构】探索排序的奥秘
若有不懂地方,可查阅我之前文章哦! 个人主页:小八哥向前冲~_csdn博客 所属专栏:数据结构_专栏 目录 排序的概念 几种排序方法介绍 冒泡排序 选择排序 插入排序 堆排序 向上调整建堆排序 向下调整建堆排序 希尔排序 快速…...

数据结构面试知识点总结3
#来自ウルトラマンティガ(迪迦) 1 线性表 最基本、最简单、最常用的一种数据结构。一个线性表是 n 个具有相同特性的数据元素的有限序列。 特征:数据元素之间是一对一的逻辑关系。 第一个数据元素没有前驱,称为头结点࿱…...

python-爬虫实例(5):将进酒,杯莫停!
目录 前言 将进酒,杯莫停! 一、浇给 二、前摇 1.导入selenium库 2.下载浏览器驱动 三、爬虫四步走 1.UA伪装 2.获取url 3.发送请求 4.获取响应数据进行解析并保存 总结 前言 博主身为一个农批,当然要尝试爬取王者荣耀的东西啦。 将进…...

AGI 之 【Hugging Face】 的【从零训练Transformer模型】之二 [ 从零训练一个模型 ] 的简单整理
AGI 之 【Hugging Face】 的【从零训练Transformer模型】之二 [ 从零训练一个模型 ] 的简单整理 目录 AGI 之 【Hugging Face】 的【从零训练Transformer模型】之二 [ 从零训练一个模型 ] 的简单整理 一、简单介绍 二、Transformer 1、模型架构 2、应用场景 3、Hugging …...

十大排序的稳定性和时间复杂度
十大排序算法的稳定性和时间复杂度是数据结构和算法中的重要内容。 以下是对这些算法的稳定性和时间复杂度的详细分析: 稳定性 稳定性指的是排序算法在排序过程中是否能够保持相等元素的原始相对顺序。根据这个定义,我们可以将排序算法分为稳定排序和…...

【系列教程之】1、点亮一个LED灯
1、点亮一个LED灯 作者将狼才鲸创建日期2024-07-23 CSDN教程目录地址:【目录】8051汇编与C语言系列教程本Gitee仓库原始地址:才鲸嵌入式/8051_c51_单片机从汇编到C_从Boot到应用实践教程 本源码包含C语言和汇编工程,能直接在电脑中通过Keil…...

搜维尔科技:Manus Metagloves使用精确的量子跟踪技术捕捉手部每一个细节动作
Manus Metagloves使用精确的量子跟踪技术捕捉手部每一个细节动作 搜维尔科技:Manus Metagloves使用精确的量子跟踪技术捕捉手部每一个细节动作...