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

news2024/12/28 18:36:41

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.coloradmin.cn/o/1189311.html

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

相关文章

猫罐头怎么选?千万别错过这5款好吃放心的猫罐头推荐!

猫罐头不仅美味可口,而且营养丰富,是专为猫咪打造的美食。那么,猫罐头怎么选?作为一位经营宠物店7年的店长,我对猫猫的饮食都非常重视,也见证了很多猫咪品尝各种猫罐头的瞬间,现在我对各个品牌的…

STK 根据六根数文件导出星下点(二)

利用给定的六根数数据,生成星下点数据 首先在STK中建立卫星对象 建立成功后,在Satellite1中设置Properties ,输入六根数数据 使用如下参数: propagator(轨道):TwoBody(开普勒) st…

【数据结构】链表经典OJ题,常见几类题型(一)

目录 题型一:反转单链表思路解析OJ题实例解题代码 题型二:快慢指针思路解析OJ题实例解题代码 两类题型的结合 题型一:反转单链表 思路解析 反转一个链表主要是想让第一个节点指向NULL,第二个节点指向第一个,以此类推。…

键盘win键无法使用,win+r不生效、win键没反应、Windows键失灵解决方案(亲测可以解决)

最近几天发现自己笔记本的win键无法使用,win失灵了,但是外接键盘后则正常:。 这个问题困扰了我一周,我都以为自己的枪神坏了。 寻找了几个解决方法,网上看了好多好多稀里糊涂的办法,都是不管用的,这里给大…

onvif backchannel

Back Channel笔记_onvif backchannel-CSDN博客 backchannel 由客户端触发:

007 Linux fork()函数

前言 本文将会以提问的形式展开向你介绍fork函数 文章重点 关于fork函数,本文重点在于解决以下疑问 疑问一: 为什么fork之前的代码只有父进程执行,然而fork之后的代码父子进程都要执行 疑问二: 1、既然fork之后父子进程会执行一…

【微服务】API治理发展历史与未来趋势

目录 一、前言 二、API治理的价值和意义 2.1 API治理概念 2.2 API治理价值和意义 2.2.1 提升团队协同效率 2.2.2 降低产品运维成本 2.2.3 识别和降低系统的外部风险 2.2.4 提供更多的拓展性 三、API生命周期管理 ​编辑 3.1 规划阶段 3.2 开发阶段 3.3 测试阶段 3…

【Linux网络】网卡配置与修改主机名,做好基础系统配置

目录 一、网络配置命令 1、查看网卡信息ifconfig Linux永久修改ip地址 2、主机名修改 ①hostname 临时修改主机名 ②永久修改主机名 第一种,使用命令修改 第二种:修改配置文件 3、路由信息 再来拓展一下,永久修改路由表信息 4、检查…

如何在双11入手经济实惠的家用监控摄像头?把这篇文章看完再决定!

随着双十一大促的临近,后台收到了许多想要入手家用监控但不知道如何选择的用户私信。关于家用监控我们之前也和大家探讨过,感兴趣的可以查看《家用智能安防系统包括哪几个部分?如何应用?》,那么今天小编就和大家聊聊如…

TikTok shop美国小店适合哪些卖家做?附常见运营问题解答

一、Tiktok shop小店分类 大家都知道,美国小店可以分为5 种: 美国本土个人店: 最灵活,有扶持政策;美国法人企业店:要求高,有扶持政策;美国公司中国人占股店 (ACCU店) : 权重相对低&#xff0c…

C语言数据结构-----单链表(无头单向不循环)

前言 本篇讲述了单链表的相关知识,以及单链表增删查改的代码实现。 文章目录 前言1.链表1.1 链表的结构和概念 2.(增删查改)单链表的实现2.1 打印链表2.2 尾插2.3 尾删2.4 头插2.5 头删2.6 查找2.7 在指定位置(pos)前插入2.8 在指定位置(pos)删除2.9 在指定位置(p…

骨传导蓝牙耳机推荐,2023骨传导耳机选购攻略

相信大家佩戴入耳式耳机时间长后,都会出现耳朵痛的情况,这也是这类耳机的一个通病了,为了缓解这一问题,骨传导耳机出现了,并且凭借佩戴舒适,并且不会耳痛等优点迅速成为当下最受欢迎的耳机款式,…

第14章,lambda表达式与流处理例题

package 例题;import java.util.List; import java.util.stream.Collectors; import java.util. stream.Stream;public class 例题19 { public static void main(String[] args){List<例题14> list 例题14.get例题14List();//获取公共类的测试数据Stream<例题14>…

leetCode 206.反转链表 图解

206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表 class Solution { public:ListNode* reverseList(ListNode* head) {ListNode* s NULL;ListNode* phead;while(p) {headhead->nex…

分享4个MSVCP100.dll丢失的解决方法

msvcp100.dll是一个重要的动态链接库文件&#xff0c;它是Microsoft Visual C 2010 Redistributable Package的一部分。这个文件的作用是提供在运行C程序时所需的函数和功能。如果计算机系统中msvcp100.dll丢失或者损坏&#xff0c;就会导致软件程序无法启动运行&#xff0c;会…

python-jupyter实现OpenAi语音对话聊天

1.安装jupyter 这里使用的是jupyter工具&#xff0c;安装时需要再cmd执行如下命令&#xff0c;由于直接执行pip install jupyter会很慢&#xff0c;咱们直接使用国内源 pip install --user jupyter -i http://pypi.tuna.tsinghua.edu.cn/simple/ --trusted-host pypi.tuna.t…

leetcode一道比较难的链表题

今天还是继续来分享我们的链表题&#xff0c;这个题目有点难&#xff0c;主要是思路比较难想&#xff0c;但是如果沥青思路写起来就比较简单了&#xff08;我乱讲的&#xff09; 随机链表的复制 这个是题目的描述&#xff0c;大家也可以在链接里看&#xff0c;那我把这道题目…

React中组件之间如何通信?

一、是什么 我们将组件间通信可以拆分为两个词&#xff1a; 组件通信 回顾Vue系列的文章&#xff0c;组件是vue中最强大的功能之一&#xff0c;同样组件化是React的核心思想 相比vue&#xff0c;React的组件更加灵活和多样&#xff0c;按照不同的方式可以分成很多类型的组件…

Unity游戏开发基础之数据结构部分

设计模式 含义&#xff1a;帮助我们降低对象之间的耦合度常用的方法称为设计模式。使用设计模式是为了可重用代码&#xff0c;让代码更容易被其他人所理解&#xff0c;保证代码可靠性&#xff0c;使代码编制真正工程化&#xff0c;这是软件工程的基石。 分类&#xff1a; 创建…

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

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