二叉树--相同的树

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例 1:

输入:p = [1,2,3], q = [1,2,3]
输出:true

思路

一、

何为相同?  必须从头到尾完完整整的相同,才算相同。

可通过前序遍历法,遍历整个树。

可通过以下思路:

//空节点

//至少有一个不为空

 //全不为空

二、

子问题:除了判断根节点,还需判断子树是否相同

结束条件:不同return false。 当完全相同时,根节点最终会走到空树,此时才能保证子树相同,返回true (也是唯一 一个可以返回true的条件)。

代码

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);     //右树}

代码解读

1.

    //空节点也需要判断

    if (p == NULL && q == NULL)    

        return true;

树不能轻易assert判空,因为空节点也需要比较,也是树的一部分。

2.

    if (p == NULL || q == NULL)

        return false;

   由于第一个return的存在,能执行到此处时,必然一个不为空!

3.

 if (p->val != q->val)   //节点

        return false;

不能判断 == 就return true; 正如开头所说,必须全部相等才能return true;

4.

  return isSameTree(p->left, q->left)   //左树

        && isSameTree(p->right, q->right);     //右树

当所有递归都完成之后,每一层的结果都是true,才能最终返回true。

由于返回类型是bool类型,因此要用 && 逻辑与 连接两个递归结果。

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

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

相关文章

90天玩转Python—14—基础知识篇:变量进阶

90天玩转Python系列文章目录 90天玩转Python—01—基础知识篇:C站最全Python标准库总结 90天玩转Python--02--基础知识篇:初识Python与PyCharm 90天玩转Python—03—基础知识篇:Python和PyCharm(语言特点、学习方法、工具安装) 90天玩转Python—04—基础知识篇:Pytho…

JavaEE 初阶篇-深入了解 CAS 机制与12种锁的特征(如乐观锁和悲观锁、轻量级锁与重量级锁、自旋锁与挂起等待锁、可重入锁与不可重入锁等等)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 乐观锁与悲观锁概述 1.1 悲观锁(Pessimistic Locking) 1.2 乐观锁(Optimistic Locking) 1.3 区别与适用场景 2.0 轻…

C++高级特性:柯里化过程与std::bind(六)

1、柯里化过程 1.1、operator()的引入 现在需要完成这样一个需求:有一个函数每次调用返回的结果不一样。例如:两次调用的返回值都不一样那么就可以达到这种目的 1.1.1、简单点的写法 可以给一个全局的变量(静态变量)&#xff…

java项目两种方法实现大批量数据:存在就更新,不存在就新增,脏数据就删除。

java项目两种方法实现大批量数据:存在就更新,不存在就新增,脏数据就删除。 文章目录 java项目两种方法实现大批量数据:存在就更新,不存在就新增,脏数据就删除。一、法一:存在就更新,…

Docker 安装Kali Linux作为攻防演练的工具

使用Docker Compose安装和运行Kali Linux是一种简便且灵活的方式,特别适合那些希望在隔离环境中快速部署和管理多个Docker容器的用户。以下是详细的步骤,包括如何设置Docker Compose文件来运行Kali Linux: 步骤 1: 安装Docker 如果你的系统…

深入理解JVM垃圾收集器

相关系列 深入理解JVM垃圾收集算法-CSDN博客 目前市面常见的垃圾收集器有Serial、ParNew、Parallel、CMS、Serial Old、Parallel Old、G1、ZGC以及有二种不常见的Epsilon、Shenandoah的,从上图可以看到有连线的的垃圾收集器是可以组合使用,是年轻代老年代…

[NOIP2000 提高组] 单词接龙

[NOIP2000 提高组] 单词接龙 题目背景 注意:本题为上古 NOIP 原题,不保证存在靠谱的做法能通过该数据范围下的所有数据。 本题为搜索题,本题不接受 hack 数据。关于此类题目的详细内容 NOIP2000 提高组 T3 题目描述 单词接龙是一个与我…

【搜索算法】靠item标签召回,超越ElasticSearch+分词的baseline

要超越ElasticSearch(item名)分词的baseline,如果都要求 有相关性的item(有token匹配),其实就是相当于优化分词,而分词优化的极限就是把 item名和query词 切分成字级token。 所以标签召回&…

Input DropDown 拼接成 select组件(基于antd和react)

前言:为什么不直接用select,还要舍近求远搞inputdropdown这种缝合怪,是因为antd的select不支持选中项再编辑,效果如图 比如:选中的lucy文案变成了placeholder不能再编辑了 封装此组件虽然比较简单,但还是有…

C++中的for循环

上一讲C的输入输出与判断经过练习,就可以写简单的程序了。但是在信奥赛中,几乎没有不需要使用循环的。因此,循环是C的一门必学课。 时间复杂度 时间复杂度是初赛中一个重要的考点。何为时间复杂度?就是程序执行语句的速度。带有…

PLC互连全攻略:Profinet和EthernetIP实操演示

在今日的技术分享中,将详细探讨实现Profinet和Ethernet/IP的通信配置,以连接西门子PLC(Profinet)和罗克韦尔PLC(Ethernet/IP)。本篇将重点介绍专为通信而设计的Profinet转Ethernet/IP网关,在联接…

ActiveMQ介绍及linux下安装ActiveMQ

ActiveMQ介绍 概述 ActiveMQ是Apache软件基金下的一个开源软件,它遵循JMS1.1规范(Java Message Service),是消息队列服务,是面向消息中间件(MOM)的最终实现,它为企业消息传递提供高…

Linux命令学习—linux 下的用户和组的管理(上)

1.1、linux 系统下用户角色 在 linux 系统下用户的角色不同,权限和所能完成的任务也不同,用户角色是通过 UID 来识别的, 注意:在 linux 下要注意 root 用户的 UID 的唯一性。 ①、Root 系统管理员超级用户,系统唯一&a…

C#-MemoryMarshal

MemoryMarshal 类是 .NET 中用于处理内存的工具类,它提供了一组静态方法,用于在托管代码中以安全和高效的方式操作内存块。MemoryMarshal 类主要用于处理原始内存数据而不需要进行复制,这对于性能关键的操作非常有用。 MemoryMarshal 类包含…

【R语言从0到精通】-3-R统计分析(列联表、独立性检验、相关性检验、t检验)

上两次教程集中学习了R语言的基本知识,那么我们很多时候使用R语言是进行统计分析,因此对于生物信息学和统计科学来说,R语言提供了简单优雅的方式进行统计分析。教程参考《Rlearning》 3.1 描述性统计分析 3.1.1 载入数据集及summary函数 我…

【力扣题】关于单链表和数组习题

🌈 个人主页:白子寰 🔥 分类专栏:python从入门到精通,魔法指针,进阶C,C语言,C语言题集,C语言实现游戏👈 希望得到您的订阅和支持~ 💡 坚持创作博文…

(Java)数据结构——图(第五节)Kruskal的实现最小生成树(MST)

前言 本博客是博主用于复习数据结构以及算法的博客,如果疏忽出现错误,还望各位指正。 Kruskal算法(Kruskal的实现原理) Kruskal算法的原理: 就是每次取最小的边,看看是不是与已经选择的构成回路&#x…

金融机构面临的主要AI威胁:身份伪造统与社会工程攻击

目录 攻击者利用AI威胁的过程 金融机构如何防范AI攻击 针对AI欺诈的解决方案 2023年11月,诈骗分子伪装成某科技公司郭先生的好友,骗取430万元;2023年12月,一名留学生父母收到孩子“被绑架”的勒索视频,被索要500万元赎…

ISTQB选择国内版,还是国际版呢

1, ISTQB简介 ISTQB(International Software Testing Qualifications Board)是一个国际软件测试资格认证机构,旨在提供一个统一的软件测试认证标准。ISTQB成立于2002年,是非盈利性的组织,由世界各地的国家或地区软件测…

Logging 日志输出 - 无双重输出问题 - 可多个py文件 - Python

一、多个py文件每次只将一条日志输出到同一个log文件(yourpath\test): (一)主文件: 1. logFile "yourpath\test" 2. if True: import logging from logging import handlers logger logging.getLogg…