leetcode刷题日记:100.Same Tree(相同的树)和101.Symmetric Tree(对称二叉树)

100.Same Tree(相同的树)

题目给了我们两棵树要我们判断这两颗树是否相同,我首先想到的就是前序序列与中序序列可以唯一确定一棵树,如果我能分别确定这两棵树的前序序列与中序序列,然后再分别比较它们的前序序列与中序序列就能得到这两棵树是否相同,这样一想似乎没错,但是如果树的结点的值一样呢?一样你还能通过前序序列与中序序列判断吗?显然不能,也就是说通过树的前序序列与中序序列并不能实现判断两颗树是否相同,因为有些情况是这种方法不能判断的。
那么有没有更好的方法呢?
我们来思考以下如果两棵树p,q相同是不是这两个树的根结点相同并且p的左子树与q的左子树相同,p的右子树与q的右子树相同,也就是说p与q是否相同,需要判断三部分,两棵树根结点的值是否相同,两棵树左子树是否相同,两棵树右子树是否相同,树的子树是否相同是不是也需要用到上面说的条件,判断子树根结点的值,子树的左子树,子树的右子树,显然这是递归定义的,我们可以采用递归的方法进行问题的解决。
接下来我们来探讨终止条件如何确定,假设我们有以下两颗树p、q,
在这里插入图片描述

我们将这两颗树重叠到一起,假设树的所有结点的值都是1,我们重叠后相同的部分用红色表示,不同的部分仍用各自的颜色表示,我们可以得到下面这样一棵树。

在这里插入图片描述
我们在遍历的时候一定会到达其底层结点,到达其底层结点之后,此时所在的结点是一个树的根结点而且此子树没有左孩子与右孩子对吧,如果再遍历左孩子一定会得到一个NULL,遍历右孩子也同理,但是在另一棵树递归时走的是相同的路径下来的,此树的现在的这一个结点也应该是NULL对吧,因为只有这样才是相同的,也就是说要终止递归的条件应该是 p = N U L L , q = N U L L p=NULL,q=NULL p=NULLq=NULL,此时返回true,如果一个树的当前结点是NULL,另一颗树的当前结点不是NULL,那么这两棵树在相同的位置一个有结点一个没有,必然两颗树不会相同。所以返回的终止条件 p = N U L L , q ≠ N U L L 或者 p ≠ N U L L , q = N U L L p=NULL,q\neq NULL或者p\neq NULL,q=NULL p=NULLq=NULL或者p=NULL,q=NULL此时应该返回false。这是递归终止的条件,但是其他的不是递归终止的要返回什么呢?
终止递归的层是NULL对吧,上一层就是树的一个结点了,这一个结点是不是子树,只有一个根结点的也是一个树,如何判断两个树的子树是否相等,也就是说必须判断三个部分当前结点的值、左子树、右子树,当都为真时,返回真,所以逻辑联结词用且。写成递归公式如下:
i s S a m e T r e e ( p , q ) = { t r u e p = N U L L , q = N U L L f a l s e p = N U L L , q ≠ N U L L 或者 p ≠ N U L L , q = N U L L p − > v a l = = q − > v a l 且 i s S a m e T r e e ( p − > r i g h t , q − > r i g h t ) 且 i s S a m e T r e e ( p − > l e f t , q − > l e f t ) 其他情况 isSameTree(p, q)=\begin{cases} true & p=NULL,q=NULL \\ false & p=NULL,q\neq NULL或者p\neq NULL,q=NULL\\ p->val==q->val且isSameTree(p->right, q->right)且isSameTree(p->left,q->left) & 其他情况 \end{cases} isSameTreep,q= truefalsep>val==q>valisSameTree(p>right,q>right)isSameTree(p>left,q>left)p=NULLq=NULLp=NULLq=NULL或者p=NULL,q=NULL其他情况
在这里插入图片描述
在这里插入图片描述
经过比较我们可以得知红色标记的这两个点是相同的
在这里插入图片描述
同理可以得到红色结点的兄弟是相同的
在这里插入图片描述
然后返回上一级,我们可以比较根结点的值得出如图所示的两颗子树是相同的
在这里插入图片描述

如此进行下去就可以知道这两棵树是不是相同的树。
代码如下:

 bool isSameTree(struct TreeNode* p, struct TreeNode* q) {if(p==NULL && q==NULL){return true;}if(p==NULL&&q!=NULL||p!=NULL&&q==NULL){return false;}return p->val==q->val&&isSameTree(p->right, q->right)&&isSameTree(p->left, q->left);
}

运行结果如图所示:
在这里插入图片描述

101.Symmetric Tree(对称二叉树)

有了上面的,对称二叉树就很好理解了,就是判断根结点的两个子树是否对称相等呗,如果对称相等,那么在左子树中向左的就是右子树中向右的,只需要在100.Same Tree(相同的树)代码改一点就行了。
代码如下:

bool isSymmetricTree(struct TreeNode* p, struct TreeNode* q) {if(p==NULL && q==NULL){return true;}if(p==NULL&&q!=NULL||p!=NULL&&q==NULL){return false;}return p->val==q->val&&isSymmetricTree(p->left, q->right)&&isSymmetricTree(p->right, q->left);
}
bool isSymmetric(struct TreeNode* root) {return isSymmetricTree(root->left, root->right);
}

运行结果如图所示:
在这里插入图片描述

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

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

相关文章

3D可视化字母出现频率_vtkLinearExtrusionFilter

开发环境: Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example参考代码目的:学习与总结 demo解决问题:统计输入文本中字母出现的频率,不区分大小写,使用3D可是化方式进行显示&…

Figma转Sketch文件教程,超简单!

相信大家做设计的都多多少少听过一点Figma和Sktech,这2个设计软件是目前市场上很受欢迎的专业UI设计软件,在全球各地都有很多粉丝用户。但是相对来说,Figma与Sketch只支持iOS系统有所不同,Figma是一个在线设计软件,不限…

【网络协议】聊聊HTTPDNS如何工作的

传统 DNS 存在哪些问题? 域名缓存问题 我们知道CND会进行域名解析,但是由于本地会进行缓存对应的域名-ip地址,所以可能出现过期数据的情况。 域名转发问题 出口 NAT 问题 域名更新问题 解析延迟问题 因为在解析DNS的时候,需要进行…

【单片机基础小知识-如何通过指针来读写寄存器】

寄存器的本质就是内存,RAM,而指针是可以对内存进行操作的,因此可以通过指针来读写寄存器。 如何读取以下一片地址: 步骤1、首地址 结构体,它所占用的内存空间大小与它内部成员有关。 构造一个28字节的类型 type…

数据结构-单链表-力扣题

移除链表元素 题目链接:力扣(LeetCode) 思路:和前面学的单链表的中间删除数据一样,使要被删除节点的前一个节点指向下要被删除节点的下一个节点,然后把要被删除的节点free掉。 具体实现过程:先…

0成本LLM微调上手项目,⚡️一步一步使用colab训练法律LLM,基于microsoft/phi-1_5,包含lora微调,全参微调

项目地址 :https://github.com/billvsme/train_law_llm ✏️LLM微调上手项目 一步一步使用Colab训练法律LLM,基于microsoft/phi-1_5 。通过本项目你可以0成本手动了解微调LLM。 nameColabDatasets自我认知lora-SFT微调train_self_cognition.ipynbsel…

Spring Boot自动配置原理、实战、手撕自动装配源码

Spring Boot自动配置原理 相比较于传统的 Spring 应用,搭建一个 SpringBoot 应用,我们只需要引入一个注解 SpringBootApplication,就可以成功运行。 前面四个不用说,是定义一个注解所必须的,关键就在于后面三个注解&a…

YOLOv8教程系列:五、关闭数据增强

YOLOv8教程系列:五、关闭数据增强 在一些特殊情况下,特别是在计算机视觉任务中,如目标检测,图像的颜色扰动可能会对算法的性能和稳定性产生重要影响。在这些情况下,我们可能需要采取一些措施来关闭部分或全部的数据增…

JAVA IDEA 下载

超简单步骤一: IntelliJ IDEA 官方下载链接 点击以上链接进入下图,点击下载 继续点下载,然后等待下载完后打开安装包即可 步骤二: 打开下好的安装包,点击Browse...我们把它下载到自己喜欢的地方(主要是别占…

多语言翻译软件 Mate Translate mac中文版特色功能

Mate Translate for Mac是一款多语言翻译软件,Mate Translate mac可以帮你翻译超过100种语言的单词和短语,使用文本到语音转换,并浏览历史上已经完成的翻译。你还可以使用Control S在弹出窗口中快速交换语言。 Mate Translate Mac版特色功能…

C++指针访问数组 函数中用指针传参

用指针访问数组 在函数中用指针传参

Centos批量删除系统重复进程

原创作者:运维工程师 谢晋 Centos批量删除系统重复进程 客户一台CENTOS 7系统负载高,top查看有很多sh的进程,输入命令top -c查看可以看到对应的进程命令是/bin/bash     经分析后发现是因为该脚本执行时间太长,导致后续执…

【pytorch源码分析--torch执行流程与编译原理】

背景 解读torch源码方便算子开发方便后续做torch 模型性能开发 基本介绍 代码库 https://github.com/pytorch/pytorch 模块介绍 aten: A Tensor Library的缩写。与Tensor相关的内容都放在这个目录下。如Tensor的定义、存储、Tensor间的操作(即算子/OP&#xff…

Maven简介

一、Maven模型 二、模型实现 三、对应代码项目介绍

MySQL开启远程访问权限

默认情况下,MySQL只允许本地登录,即只能在安装MySQL环境所在的主机下访问。但是在日常开发和使用中,我们经常需要访问远端服务器的数据库,此时就需要开启服务器端MySQL的远程连接权限。1、生成环境,连接MySQL 2、查看M…

直面LED Driver测试挑战,助力显示屏行业变中求变!

杭州亚运会开幕式惊艳世界,引发社会各界一致赞誉!在大气浪漫的舞台效果中,LED屏、裸眼3D屏凭借“硬核科技”出圈,为大家带来科技、活力、诗意的“中国式浪漫”观赏体验。而这美轮美奂的LED呈现效果背后,主要依靠的是LE…

Geotrust的企业型通配符SSL证书申请

Geotrust作为世界知名的CA认证机构之一,颁发了各种SSL证书,其签发的数字证书被广泛应用于电子商务、企业间通信、网络安全等领域,SSL数字证书可以验证网络中用户的身份,确保数据的机密性和完整性。今天随SSL盾小编了解如何申请Geo…

载波通讯电表的使用年限是多久?

随着科技的飞速发展,智能家居、物联网等概念逐渐深入人心,载波通讯电表作为一种新型的智能电表,凭借其低功耗、高可靠性、远程通讯等优点,广泛应用于居民用电、工业生产等领域。那么,载波通讯电表的使用年限是多久呢&a…

怎么经营朋友圈?

朋友圈就是现代人的社交场,朋友圈发布的好坏会直接影响你的人际关系。怎么经营朋友圈?这个问题大部分人都不太知道,今天我们就来说说。 一、常见朋友圈: 1、广告型朋友圈 现在的朋友见到的,大部分都是每天发十多条的…

Spring笔记(四)(黑马)(web层解决方案-SpringMVC)

01、Spring MVC 简介 1.1 SpringMVC概述 SpringMVC是一个基于Spring开发的MVC轻量级框架,Spring3.0后发布的组件,SpringMVC和Spring可以无 缝整合,使用DispatcherServlet作为前端控制器,且内部提供了处理器映射器、处理器适配器…