当前位置: 首页 > news >正文

leetcode 100.相同的树

涉及到递归,最好多画图理解,希望对你们有帮助


100.相同的树

题目

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

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

题目链接

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

文字 和 画图 分析

  1. 思考递归进行的条件和结束的条件是什么
  2. 列举递归可能会出现的情况

针对上面两个问题进行解答:

要想找两个树的结构相同有点麻烦,换个思路,我们找它们不同

所以我们需要先对比两者的根节点,再去对比左子树和右子树

[很明显,我们采取的是 前序 遍历整个节点]

  • 在递归的时候,每一次根节点都发生变化,只要根节点对应的数值不同, 就返回 false 结束递归 (其中一种结束条件)

  • 根节点相同,我们无法判断是否两个树结构相同,只能继续递归(这是递归条件)

  • 递归期间,我们还可能碰到以下情况:

如上图:我们遇到空树了

这里还需要分两种情况讨论:

如果两个树在这个节点都是空,则返回 true (这是其中一种结束条件)

[注意:我们是先对比根,再对比左子树,最后对比右子树,所以只有左子树和右子树都为 true 才是一样的树]

如果两个树只有一个为空,则返回 false (这是其中一种结束条件)

  3. 判断的顺序问题

由于可能会遇到空树,先比较根的大小明显是不行的,所以应该把比较是否是空树的条件放前面


代码

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

相关文章:

  • 非常抱歉的通知
  • linux 命令 tmux 用法详解
  • JVM实战-掌握分派方法规则
  • MyBatis 四大核心组件之 StatementHandler 源码解析
  • STM32——继电器
  • Photoshop Circular Text
  • 鸿蒙应用开发(二)环境搭建
  • Linux gtest单元测试
  • 前端组件库开发
  • 模型 心流
  • 【华为数据之道学习笔记】3-4主数据治理
  • 本项目基于Spring boot的AMQP模块,整合流行的开源消息队列中间件rabbitMQ,实现一个向rabbitMQ
  • 使用Rust 构建C 组件
  • 汽车网络安全--关于UN R155认证的思考
  • 视频封面提取:精准截图,如何从指定时长中提取某一帧图片
  • Java超时控制的实现
  • mongodb--安装和初步使用教程
  • PhantomJS 安装
  • Redash本地开发环境搭建
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • spring-boot List转Page
  • uva 10370 Above Average
  • 从零开始的无人驾驶 1
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 高程读书笔记 第六章 面向对象程序设计
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 运行时添加log4j2的appender
  • 在Unity中实现一个简单的消息管理器
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • #每天一道面试题# 什么是MySQL的回表查询
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (2015)JS ES6 必知的十个 特性
  • (70min)字节暑假实习二面(已挂)
  • (Forward) Music Player: From UI Proposal to Code
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (八)Spring源码解析:Spring MVC
  • (二)斐波那契Fabonacci函数
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (四)模仿学习-完成后台管理页面查询
  • (五)网络优化与超参数选择--九五小庞
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .net 使用ajax控件后如何调用前端脚本
  • @Async注解的坑,小心
  • @media screen 针对不同移动设备
  • @Transaction注解失效的几种场景(附有示例代码)
  • [ 数据结构 - C++]红黑树RBTree
  • [20161214]如何确定dbid.txt
  • [AIGC] 如何建立和优化你的工作流?
  • [android]-如何在向服务器发送request时附加已保存的cookie数据
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [AR Foundation] 人脸检测的流程
  • [BZOJ] 2044: 三维导弹拦截
  • [CareerCup] 2.1 Remove Duplicates from Unsorted List 移除无序链表中的重复项