自顶向下遍历,自底向上返回。
先逐层比较,然后再传递,相当于前序遍历的模板
由于只要有一个true都可能为true,所以在比较返回的过程中全部为或的关系。

什么时候应该返回呢?
1)在遍历的过程中,当b树为空的时候应该返回,因为b树能够遍历到底,说明存在相应的子结构
2)在一开始比较的过程中,判断b树是否为空,是的话为false
但是这样如何分辨出,是因为b树的分支到底了还是因为b树没有那个分支的缘故呢?

1.2其他大佬的解法
两个函数遍历树
第一个函数遍历a树,a树的每个节点都可以作为比较的入口
第二个函数,a树遍历的节点作为比较的出发点,开始同步遍历a树和b树
对于每个函数的处理无非就是:终止条件,参数的传递,特列处理返回值

第一个函数:前序遍历a树,
终止条件:b树或者a树为空,表示匹配失败,返回false
传递参数:遍历a树的左右分支,和完整的b树

第二个函数:a树和b树同步遍历
终止条件:
(思考一下:b树为空的时候a树随意,反正b树已经到底了。但是想不明白的就是这一点,如何区分b树必然有一端为空和b树有子节点的一段遍历到空?)
所以这里不能够使用或的关系,必须使用与的关系,两端都符合条件才算是A的子树
传递参数:
a树从某一个子节点出发的和b树从某一个子节点出发的同步传入

class Solution {public:// bool isSubStructure(TreeNode* A, TreeNode* B) {//     if(!A ||!B)//     return false;//     return(recursion(A,B) || recursion(A->left,B) ||recursion(A->right,B));// }//recursion用于a树从某一点开始的子节点所构成的子树和b树的比较,而isubstructure则是用于左右子树的传递bool isSubStructure(TreeNode* A, TreeNode* B) {if(!A ||!B)return false;return (recursion(A,B) || isSubStructure(A->left,B) || isSubStructure(A->right,B));}bool recursion(TreeNode*A,TreeNode*B){if(!B)return true;if(!A ||A->val != B->val)return false;return recursion(A->right,B->right) && recursion(A->left,B->left);}
};

参考来源
作者:jyd
链接:https://leetcode-cn.com/problems/shu-de-zi-jie-gou-lcof/solution/mian-shi-ti-26-shu-de-zi-jie-gou-xian-xu-bian-li-p/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本质上是前序遍历a树,以a树的任意子节点为起点的子树和b树相比较

2021-06-28剑指offer26.树的子结构相关推荐

  1. 剑指Offer_17_树的子结构

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 解题思路 首先判断 A 和 B 是否是空,如果为空,返回false:否则找到 A 和 B 的根结点 ...

  2. 剑指 offer 树的子结构

    子树和子结构的区别 这棵大树的子树有: 4 和 5 对应的两棵子树 3 本身自己完整的一棵树 而里面的小框圈出来的不是 3 这棵大树的子树! 还是上面那张图,子结构就是不用那么严格,图中的小框就是整棵 ...

  3. 剑指offer 树的子结构

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 解决方案: /** public class TreeNode {int val = 0;Tree ...

  4. 剑指offer——树的子结构

    Q:输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) A:要查找树A中是否存在和树B结构一样的子树.我们可以分为两步: 第一步在树A中找到和B的根节点一样的值 ...

  5. 【LeetCode笔记】剑指 Offer 26-. 树的子结构 (Java、双重dfs、二刷)

    文章目录 题目描述 思路 & 代码 二刷 题目描述 思路很值得看的一道题,和之前路径总和 III的双递归思路.结构很像 思路 & 代码 isSubStructrue() 进行一个前序的 ...

  6. [二叉树]二叉搜索树转换为双向链表(剑指Offer26)

    [试题描述] 将二叉搜索树转换为双向链表 对于二叉搜索树,可以将其转换为双向链表,其中,节点的左子树指针在链表中指向前一个节点,右子树指针在链表中指向后一个节点. 思路一: 采用递归思想,对于二叉搜索 ...

  7. DayN剑指offer树基础

    //树的前序中序后续递归非递归+层序+按照每层节点输出 package baselearning.tree;import java.util.*;class TreeNode {String val; ...

  8. 剑指-利用树的前序遍历和中序遍历结果,输出树的原始结构

    需要注意两点:1.对于前序遍历第一个即为根节点.2.在前序遍历找到根节点之后,在中序遍历中根节点之前的全部为根节点的左子树,后面的全部为右子树.所以可以根据中序遍历中根节点之前的数量,在前序遍历中找出 ...

  9. 项目实训2021.06.28

    项目实训题目是关键词泛化,被分到第三小组服务展现,要求分别实现两个接口. 接口一:输入语料.输出关键词. 接口二:输入关键词.输出同义词. 要求用Flask框架实现.第一天先了解了关键词泛化的含义,简 ...

最新文章

  1. 谈“技术含量”的问题
  2. [SecureCRT]通过SFTP方式上传本地文件到服务器
  3. MySQL 语句使用到的关键字 函数 记录
  4. 使用JAVA调用MATLAB算法程序方式——使用复杂算例进行完整说明,包括参数传递
  5. 手机app登录显示服务器异常,手机app 连接云服务器异常
  6. 求助 mac企业微信多开
  7. 五种常用手机Java编程软件
  8. word使用过程中遇到的问题记录(二):如何画柱状图和折线图的组合图?
  9. 滴滴打车CTO张博:下一阶段重点机器学习
  10. 旋转角度计算(旋转手势)
  11. 3种将等高线转DEM的方法
  12. vmware虚拟服务器弊端,VM虚拟机问题总结
  13. LeetCode - Solved Algorithms
  14. 什么是网站权重以及提升权重的方法
  15. 5-29 止跌上涨中,关注明后两天能否创新高点
  16. 海报设计如何做好文案超多的海报
  17. PHP 调用bing壁纸接口
  18. Java堆内存Heap与非堆内存Non-Heap简介和设置
  19. 智能工厂需要哪些条件和技术?
  20. Talib技术因子详解(四)

热门文章

  1. android 蓝牙4.0 ble,Android 蓝牙4.0开启Notification 和 Indication
  2. 如何轻松备考,顺利通过TiDB数据库 PCTA考试
  3. Core Java For The Impatient-阅读笔记1.基本的编程结构
  4. 「首席架构看备份软件选型」Veritas NetBackup与Commvault之比较
  5. win 10 电脑喇叭音频显示红叉的处理方法
  6. 支持向量回归_浙江大学王慧芳等:用于电网节点重要度评估的一种基于网络嵌入和支持向量回归的人工智能方法...
  7. 管理者的角色修炼-第三课-赢在执行
  8. 双色球与大乐透号码生成器
  9. 微信公众号开发之上传图文消息素材(十二)
  10. C语言中定义指针==NULL的意思