【树】你真的会二叉树了嘛? --二叉树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…...
不要告诉同事你要离职!打算跳槽,新公司开出两倍薪资,私下告诉要好的同事,却被同事出卖给领导!...
职场上有真正的朋友吗?来看看这位网友的讲述:一位前同事本来打算跳槽,新公司开出的薪资是原来的两倍。她私下告诉了几位同事自己打算离职的消息,并跟同事们分享了工资翻倍的喜悦。可她万万没想到,两天之后的公司会议上…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...
LOOI机器人的技术实现解析:从手势识别到边缘检测
LOOI机器人作为一款创新的AI硬件产品,通过将智能手机转变为具有情感交互能力的桌面机器人,展示了前沿AI技术与传统硬件设计的完美结合。作为AI与玩具领域的专家,我将全面解析LOOI的技术实现架构,特别是其手势识别、物体识别和环境…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

