572. 另一棵树的子树

给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false 。

二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。

示例 1

输入:root = [3,4,5,1,2], subRoot = [4,1,2]

输出:true

示例 2

输入:root = [3,4,5,1,2,null,null,null,null,0], subRoot = [4,1,2]

输出:false

思路:

题目中给了两个二叉树,要判断其中一个是不是另一个的子树,只需要一个主要的递归函数isSub就可以搞定了。(在这个主要的递归函数中会使用另一个递归函数same作为工具)

在这个递归函数isSub中,首先判断是不是两棵二叉树一模一样(这就相当于是base case了),如果一样的话就证明我们找到了这个结构,返回True;否则就继续拿这棵树的左子树和右子树继续往下判断。

这里判断两棵树一模一样的操作,也需要我们写一个函数same来做,它也是一个递归函数,作用就是判断传入的两个节点组成的树是否相同。(具体细节就很简单啦,判断完节点的值,就继续递归地判断左右子节点,看代码就很清楚了)

代码:

class Solution(object):def isSubtree(self, root, subRoot):def same(root,subRoot):#工具函数,判断两个二叉树是否一模一样if not root and not subRoot:return True#如果都是空,也是相同if not root or not subRoot:return False#有一个是空,必不相同if root.val!=subRoot.val:#都不为空时,值不同,不相同return Falseelse:#其他情况,只能是都不为空,且值相同#接下来判断两者的左子树和右子树,都要分别相同return same(root.left,subRoot.left) and same(root.right,subRoot.right)def isSub(root,subRoot):#主要递归函数if not root: return False#如果root都没有,肯定没法包含subRootif same(root,subRoot):#如果root和subRoot一模一样了 则返回Truereturn True#其他情况,将root的左右分别送入递归,有其中一个返回True就是Truereturn isSub(root.left,subRoot) or isSub(root.right,subRoot)return isSub(root,subRoot)#正式调用,就这一句话

小结:

这道题写起来和判断平衡二叉树的题目差不多,使用两个递归函数。其中一个只是辅助的工具,主要逻辑还是在isSub函数中体现。

LeetCode另一棵树的子树相关推荐

  1. LeetCode Algorithm 572. 另一棵树的子树

    572. 另一棵树的子树 Ideas 首先想到的就是递归判断两棵树的每一个节点是否相等,那么就需要将subRoot跟root的每一个节点构成的子树判断是否相同. 递归判断相等的逻辑比较简单,首先当前两 ...

  2. 另一棵树的子树(LeetCode)

    给你两棵二叉树 root 和 subRoot .检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树.如果存在,返回 true :否则,返回 false . 二叉树 tree 的一 ...

  3. 14.相同的树另一棵树的子树检查子树二叉树中的列表(教你们使用相同的套路快速解决这四道题)

    一.相同的树 这道题是开胃菜的开始,使用递归进行解决 递归三部曲: 确定递归函数的参数和返回值 因为我们要比较的是两棵树是否相等,所以参数分别是两棵树的根节点,返回值为boolean类型,即两棵树是否 ...

  4. 【力扣】另一棵树的子树

    572. 另一棵树的子树 - 力扣(LeetCode) 题目: 给你两棵二叉树 root 和 subRoot .检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树.如果存在,返回 ...

  5. 572. 另一棵树的子树————简单

    目录 题目 解题思路 Code 运行结果 题目 572. 另一棵树的子树 给你两棵二叉树 root 和 subRoot .检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树.如果 ...

  6. 判断一棵树是否是另一棵树的子树(Java实现)

    前面一篇文章介绍了如何判断两棵树相等,思路就是遍历每个节点,然后判断是否均相等,需要用递归来实现.如果需要判断一棵树是另一棵树的子树,该怎么办呢?我们需要借助前面的思路,需要先判断两棵树相等,这里就是 ...

  7. 二叉树 判断一棵树是否是另一棵树的子树

    题目:判断判断一棵树是否是另一棵树的子树,子树的意思是只要包含了一个结点,就得包含这个结点下的所有节点.意思就是二叉树结点的值也要相等 如下图2就是1的子树 如果将第二颗树根节点右孩子data改为2 ...

  8. 572. 另一棵树的子树

    572. 另一棵树的子树 一.题目 二.参考代码 一.题目 给你两棵二叉树 root 和 subRoot .检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树.如果存在,返回 t ...

  9. 【刷题】572. 另一棵树的子树

    572. 另一棵树的子树 一.题目描述 二.示例 三.实现 572. 另一棵树的子树 一.题目描述 给你两棵二叉树 root 和 subRoot .检验 root 中是否包含和 subRoot 具有相 ...

最新文章

  1. 腾讯内部产品课:细分用户
  2. 用最简单的方式训练史上最强ResNet-50,性能超过魔改结构的ResNeSt
  3. POJ 3280 Cheapest Palindrome
  4. SQL2005中使用backup、restore来备份和恢复数据库
  5. [Swift]LeetCode198. 打家劫舍 | House Robber
  6. Android 英文文档下载地址
  7. openoffice 64_科学网—四棱的核桃:卡片机傻拍2020(64)
  8. 基于嵌入式linux的设计与实现,基于嵌入式Linux图片浏览器的设计与实现
  9. 基于能量采集的认知无线电功率分配
  10. PERT图之事件、活动、松弛时间、关键路径
  11. 开源 | 写了个微博去广告、屏蔽拉黑插件
  12. Bootstrap3引入相关知识点
  13. Ubuntu自己动手本地模拟搭建git服务器
  14. springboot RedisTemplate 提示没有双引号序列化失败问题
  15. 实时热力图_原来微信按下这个键,就能轻松知道对方的实时位置,看完涨知识了...
  16. OpenCV Gabor滤波器实现纹理提取与缺陷分析
  17. php 报警声,php 报警 [NOTICE] fpm_children_bury()
  18. SSS1623简易USB麦克风方案中文设计电路
  19. PHPWord 表格居中和合并单元格
  20. 科全可拓展免费进销存系统

热门文章

  1. 工作中的一些错误解决记录
  2. Python制作简单的终端交互小游戏
  3. 怎样通过手机与电脑上网
  4. java将多个pdf文件合并成一个pdf文件
  5. 支持解析GitHub Flavored Markdown(GFM)的PHP库-Parsedown
  6. C#之internal访问修饰符
  7. 人人网2015研发笔试卷C
  8. java 透明对话框_java实现jframe透明窗体示例
  9. 全网最全manim教程,可直接在线修改编译
  10. 基础-01-要背单词?要先了解音读和训读