【树】你真的会二叉树了嘛? --二叉树LeetCode专题

Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法......感兴趣就关注我吧!你定不会失望。
🌈个人主页:主页链接
🌈算法专栏:专栏链接
我会一直往里填充内容哒!
🌈LeetCode专栏:专栏链接
目前在刷初级算法的LeetBook 。若每日一题当中有力所能及的题目,也会当天做完发出
🌈代码仓库:Gitee链接
🌈点击关注=收获更多优质内容🌈
本章记录下目前刷到的二叉树的各类题型,做一个总结。一起来学习吧!
对二叉树还不熟悉的同学,可以看看我之前发的关于二叉树的文章哦 二叉树专题
话不多说 开始吧!
目录
题目:144. 二叉树的前序遍历
题解:
代码实现:
题目:222. 完全二叉树的节点个数
题解:
代码实现:
题目:剑指 Offer 28. 对称的二叉树
题解:
代码实现:
题目:226.翻转二叉树
题解:
代码实现:
题目:104. 二叉树的最大深度
题解:
代码实现:
题目:965. 单值二叉树
编辑
题解:
代码实现:
题目:100.相同的树
题解:
代码实现:
完结撒花:
题目:144. 二叉树的前序遍历
题解:
先来一题简单的题目练练手,之前有提到过,二叉树的前序遍历就是通过根左右的遍历方式来进行的,所以这题总体思路也是一样.不过要说明的是,这里采用了c语言,所以输出时需要自己创建一个动态数组,每次将访问到的val存入动态数组当中即可.
(中后序大致相同,改变的仅为访问节点的时间,所以这里就不过多赘述)
代码实现:
struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;
};
int checksize(struct TreeNode *root)
{return root==NULL?0:checksize(root->left)+checksize(root->right)+1;
}
void preorder(struct TreeNode* root,int *a,int *pi)
{if(root==NULL){(*pi)++;return;}a[(*pi)++]=root->val;preorder(root, a, pi);preorder(root, a, pi);return;
}
int* preorderTraversal(struct TreeNode* root, int* returnSize){*returnSize=checksize(root);int *a=(int *)malloc(sizeof(int)* *returnSize);preorder(root,a,0);return a;
}
题目:222. 完全二叉树的节点个数

题解:
这题虽然被标注为了中等题,但我认为知道二叉树的本质之后,其充其量为一个简单题,并且有秒杀的方法
依照样例,这棵树应该长这样

我们要做的就是统计其本身节点数与其左右树的节点数
例如2要返回给上一层的就是3(左节点一个,右节点一个,加上自己)
而4这个节点要返回给上层的就是1(左节点无 右节点无 仅有一个自己)
所以很容易看出来 若有节点则返回1+左右子树.若无节点则直接返回0
这样一层层递归后,1节点收到的就是其左右子树的和,最后返回给答案的就是1+左右子树和
这里给出两种代码,第一种是将每一步分开来了,若这层为空 则size不变,若不为空,则size++继续遍历左右子树(比较像前序遍历)
代码实现:
#include<iostream>
struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;};int TreeSize(struct TreeNode* root,int size)
{if (root == NULL)return size;size++;size=TreeSize(root->left,size);size=TreeSize(root->right,size);return size;
}
int countNodes0(struct TreeNode* root){return TreeSize(root,0);
}
//
int countNodes(struct TreeNode* root){return root==NULL?0:countNodes(root->left)+countNodes(root->right)+1;
}
题目:剑指 Offer 28. 对称的二叉树

题解:
镜像对称无非就是判断,其延中线对折这棵树,能否重叠.也就是根的左右子树是否完全相同
先分情况来讨论:

若两个节点都为空,则肯定相同 也就是p==NULL&&q==NULL
其中一个为空另一个不为空,则肯定不同 p==NULL||q==NULL
之后再判断两个节点的val是否相等,若相等则true,否则返回false p->val==q->val
以单个节点的视角来看,情况只有这么多,之后我们就可以开始进入递归来判断了,分别访问其左右子树,我们需要的只是知道他最后返回的是true还是false,因为单个节点的情况都被我们判断完了
每一个节点都可以看为单个节点
代码实现:
bool check(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 check(p->left,q->right)&&check(p->right,q->left);
}
bool isSymmetric(struct TreeNode* root){return check(root->left,root->right);
}
题目:226.翻转二叉树

题解:
依旧从一个节点的角度来看,假设只有一个这样的二叉树,我们要做的就是

将其左右子树进行调换即可.也就是找到其左子树与右子树.拿一个中间变量,进行交换(类似两数调换)
现在我们要做的是考虑一下递归停止的情况,老样子 若根为NULL,则返回空,若不是则返回其根节点.(根节点此时为已经交换完的子树 之后再将两个根节点进行调换即可达到镜像)

代码实现:
#include<iostream>
using namespace std;
struct TreeNode {int val;TreeNode *left;TreeNode *right;};class Solution {
public:TreeNode* mirrorTree(TreeNode* root) {if(root==NULL)return NULL;TreeNode* left=mirrorTree(root->left);TreeNode* right=mirrorTree(root->right);root->left=right;root->right=left;return root;}
};
题目:104. 二叉树的最大深度

题解:
这题和节点个数的那题有点类似,不过其多了一个属性,要取最大值.
依旧先设定返回的规则,若为空则返回0.
之后遍历左子树的深度.再遍历右子树的深度,返回其最大值+1即可
这里虽然也可以秒杀,但是没有必要了,让人能看懂的代码才是一段好的代码.
代码实现:
int maxDepth(struct TreeNode* root){if(root==NULL)return 0;int left=maxDepth(root->left);int right=maxDepth(root->right);return left>right?left+1:right+1;
}
题目:965. 单值二叉树
题解:
这题也很简单,先判断该节点是否为空,若为空则肯定是单值,返回true
之后与其左右节点作比较,若不同则返回false
代码实现:
bool isUnivalTree(struct TreeNode* root){if(root==NULL)return true;if(root->left&&root->left->val!=root->val)return false;if(root->right&&root->right->val!=root->val)return false;return isUnivalTree(root->left)&&isUnivalTree(root->right);
}
题目:100.相同的树

题解:
依旧先处理初始情况(与镜像大致相同,仅遍历顺序不同)
若两个节点都为空,则肯定相同 也就是p==NULL&&q==NULL
其中一个为空另一个不为空,则肯定不同 p==NULL||q==NULL
之后再判断两个节点的val是否相等,若相等则true,否则返回false p->val==q->val
之后在遍历其左右子树即可
代码实现:
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));}
完结撒花:
🌈本篇博客的内容【】已经结束。
🌈若对你有些许帮助,可以点赞、关注、评论支持下博主,你的支持将是我前进路上最大的动力。
🌈若以上内容有任何问题,欢迎在评论区指出。若对以上内容有任何不解,都可私信评论询问。
🌈诸君,山顶见!
相关文章:
【树】你真的会二叉树了嘛? --二叉树LeetCode专题
Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…...
《LeetCode 热题 HOT 100》——寻找两个正序数组的中位数
本期给大家带来的是是《LeetCode 热题 HOT 100》第四题——寻找两个正序数组的中位数的题目讲解!!!() 本文目录 💥题意分析 💥解题思路: 1、直接法 (❌) …...
Unity- 游戏结束以及重启游戏
文章目录游戏结束以及重启游戏建个游戏结束页面编写委托类 游戏主角 以及 ui管理类的脚本重启游戏游戏结束以及重启游戏 思路:利用Canvas创建好覆盖全屏的结束页面,默认关闭。游戏结束时,玩家控制的对象发起委托,ui管理收下委托&…...
NGK BeCu8·11铜合金板材
NGK BeCu811铜合金板材 CB498K、CuSn6Zn4Pb2-B、CC498K、CuSn6Zn4Pb2-C CB494K、CuSn5Pb9-B、CC494K、CuSn5Pb9-C CB495K、CuSn10Pb10-B、CC495K、CuSn10Pb10-C CB496K、CuSn7Pb15-B、CC496K、CuSn7Pb15-C CB497K、CuSn5Pb20-B、CC497K、CuSn5Pb20-C 日本古河连接器专用材料如:…...
电脑突然死机怎么办?正确做法在这!
案例:电脑突然死机怎么办? 【家人们,我刚刚正在做工作报告,突然间电脑就死机了,这可怎么办啊?有什么方法可以快速解决这个问题吗?急急急!】 电脑在使用过程中,有时会出…...
基于cell数组的MATLAB仿真(附上完整仿真源码)
MATLAB是一款强大的数学软件,它提供了许多数据结构来存储和处理数据。其中,cell数组是一种非常有用的数据结构,它允许在一个数组中存储不同类型的数据,包括数值、字符串、逻辑值和其他cell数组等。 文章目录简单代码完整仿真源码下…...
电脑蓝屏问题排查
最近电脑安装了最新win10,更新最新的驱动以后,开机几分钟后,会蓝屏重启,报错为: DRIVER_POWER_STATE_FAILURE 下载蓝屏分析工具BlueScreenView 问题出在ntoskrnl.exe bing搜索给出了二种解决方案: 1&a…...
SpringBoot配置slf4j + logback
文章目录日志体系结构在SpringBoot中使用slf4j logback日志框架四种常用的日志输出1. ConsoleAppender2. FileAppender3. RollingFileAppender之TimeBasedRollingPolicy4. RollingFileAppender之SizeAndTimeBasedRollingPolicy日志过滤1. 级别介绍2. 过滤节点filter介绍Spring…...
JAVA——网络编程基本概念
🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔🦾&am…...
[JavaEE]----Spring02
文章目录Spring_day021,IOC/DI配置管理第三方bean1.1 案例:数据源对象管理1.1.1 环境准备1.1.2 思路分析1.1.3 实现Druid管理步骤1:导入druid的依赖步骤2:配置第三方bean步骤3:从IOC容器中获取对应的bean对象步骤4:运行程序1.1.4 实现C3P0管理步骤1:导入C3P0的依赖步…...
笔记本可自行更换CPU、独显了,老外用它手搓了台“PS5”
前面说到微软打算在 Win12 出来前搞出个模块化的Windows:下一个系统不是Win12,微软要复活Win10X。 模块化不用小蝾再过多介绍了,就像积木一样拼在一起组成一个整体。 优势就很明显了,由于每个部分都是单独的模块,更新…...
Linux uart驱动框架
Linux内核提供了标准的UART驱动程序,可以通过以下步骤编写: 首先需要定义一个结构体来存储串口设备数据。在该结构体中,包含一个uart_port结构体,用于与Linux内核通信,并包含一些设备特定的数据(例如波特率…...
第一个禁止ChatGPT的西方国家
意大利成为第一个有效禁止 ChatGPT 的西方国家。 由于可能违反隐私和数据法,该国的数据监管机构已下令开发聊天机器人的 OpenAI 停止运营。 意大利数据保护局 (GPDP) 提到了一些担忧,包括大量收集用户数据和存储以训练 AI 算法。 ChatGPT 是一种大型语…...
Web 攻防之业务安全:Session会话注销测试.
Web 攻防之业务安全:Session会话注销测试. 业务安全是指保护业务系统免受安全威胁的措施或手段。广义的业务安全应包括业务运行的软硬件平台(操作系统、数据库,中间件等)、业务系统自身(软件或设备)、业务所…...
4月最新编程排行出炉,第一名ChatGPT都在用~
作为一名合格的(准)程序员,必做的一件事是关注编程语言的热度,编程榜代表了编程语言的市场占比变化,它的变化更预示着未来的科技风向和机会! 快跟着一起看看本月排行有何看点: 4月Tiobe排行榜前…...
生成不保存在服务器的附件,并以附件形式发送邮件
需求:从数据库中抓取需要的数据,将数据生成excel表格,并将此表格以附件的形式放置到邮件中发送 //发送带附件的邮件,同时附件不会生成到服务器中public static String sendFileEmail(String form, String code, String to, String…...
Golang Gin框架HTTP上传文件
Golang Gin框架HTTP上传文件解析 文章目录Golang Gin框架HTTP上传文件解析HTTP上传的文件的原理Gin框架文件上传Demo限制文件上传的大小文件类型验证文件上传进度-后台计算文件上传进度HTTP上传的文件的原理 HTTP协议的文件上传是通过HTTP POST请求实现的,使用mult…...
BM36-判断是不是平衡二叉树
题目 输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。 在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树 平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空…...
Quartz 单例定时任务
1、引入jar包,继承 Job 接口,编写需要执行的业务逻辑 <dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.2</version></dependency> public class D…...
不要告诉同事你要离职!打算跳槽,新公司开出两倍薪资,私下告诉要好的同事,却被同事出卖给领导!...
职场上有真正的朋友吗?来看看这位网友的讲述:一位前同事本来打算跳槽,新公司开出的薪资是原来的两倍。她私下告诉了几位同事自己打算离职的消息,并跟同事们分享了工资翻倍的喜悦。可她万万没想到,两天之后的公司会议上…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

