描述

输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构)
假如给定A为{8,8,7,9,2,#,#,#,#,4,7},B为{8,9,2},2个树的结构如下,可以看出B是A的子结构

数据范围:
0 <= A的节点个数 <= 10000
0 <= B的节点个数 <= 10000

示例1

输入: {8,8,7,9,2,#,#,#,#,4,7},{8,9,2}返回值:true

示例2

输入: {1,2,3,4,5},{2,4}返回值:true

示例3

输入: {1,2,3},{3,1}返回值:false

C++,剑指Offer原书代码详解

先在树A中找到值为树B根节点的值的节点,然后判断这个节点的子树是否含有和树B一样的结构。

  1. 第一步中,查找与根节点值一样的节点,采用递归的方法来遍历树。
  2. 第二步中,同样采用递归的方法,判断判断当前对应节点是否相同,然后递归判断左、右节点,递归终止条件是到达了叶节点。
class Solution {public:bool DoesTree1HaveTree2(TreeNode* pRoot1, TreeNode* pRoot2){if(pRoot2 == nullptr)return true;if(pRoot1 == nullptr)return false;if(!(pRoot1->val==pRoot2->val))return false;return DoesTree1HaveTree2(pRoot1->left, pRoot2->left) &&DoesTree1HaveTree2(pRoot1->right, pRoot2->right);}bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {bool result = false;if(pRoot1 != nullptr && pRoot2 != nullptr){if(pRoot1->val==pRoot2->val)result = DoesTree1HaveTree2(pRoot1, pRoot2);if(!result)result = HasSubtree(pRoot1->left, pRoot2);if(!result)result = HasSubtree(pRoot1->right, pRoot2);}      return result;}
};

运行时间:8ms
超过0.98% 用C++提交的代码
占用内存:1420KB
超过15.05%用C++提交的代码

【JZ26 树的子结构】相关推荐

  1. 剑指offer(C++)-JZ26:树的子结构(数据结构-树)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(我们约定空树不是任意一个树的子结构) ...

  2. 剑指offer:面试题26. 树的子结构

    题目:树的子结构 输入两棵二叉树A和B,判断B是不是A的子结构.(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值. 例如: 给定的树 A: 3     / \ ...

  3. 剑指offer_第17题_树的子结构_Python

    题目描述 输入两棵二叉树A,B 判断B是不是A的子结构. 其中空树不是任意一个树的子结构 class TreeNode:def __init__(self, x):self.val = xself.l ...

  4. 剑指offer:树的子结构

    题目 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 解题思路 暴力做法 取出树A/B的前序.中序: 判断这两个数组是否A都包含B,是则true. 前序和中 ...

  5. 《剑指Offer》题目:树的子结构

    题目描述:树的子结构 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目分析:此题可以拆成两题,1.在二叉树中查找是否存在某个结点:2.判断两个二叉树是否 ...

  6. 【剑指offer-Java版】18树的子结构

    树的子结构:输入两棵二叉树A B,判断B是不是A的子结构 就是一个递归加上一个树的先序遍历 public class _Q18 {public boolean HasSubTree(BinaryTre ...

  7. 剑指Offer_17_树的子结构

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

  8. 剑指 offer 树的子结构

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

  9. 《剑指offer》-- 树的子结构、二叉树的镜像、二叉树的深度、平衡二叉树

    一. 树的子结构: 1.题目: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构. 2.解题思路: 这个题比较简单,利用递归的方式就可以判断B是不是A树的子结构 ...

最新文章

  1. [NOI2010]能量采集
  2. (016)java后台开发之Eclipse安装反编译插件
  3. XamarinAndroid组件教程RecylerView动画组件使用动画(3)
  4. 一周一论文(翻译)——[SIGMOD 2016] RDMA over Commodity Ethernet at Scale
  5. 关于c语言中合法的数值常量
  6. boost::fusion::make_unfused用法的测试程序
  7. vue实现侧边折叠菜单栏手风琴效果
  8. 【操作系统】多线程与多任务的比较
  9. vuejs npm chromedriver 报错
  10. Android SDK Manager 更新代理配置
  11. linux ftp远程更新,用ftp远程安装linux
  12. 设置NumericStepper控件不可用状态的字体颜色。
  13. python---pass和continue和break和exit()区别
  14. Excel 从web中提取数据
  15. ArcMap怎么导出shape文件到奥维互动地图
  16. Android之使用自定义华为扫描SDK扫描二维码和识别本地图片
  17. github上传本地项目代码
  18. C#串口编程基础入门
  19. C语言:银行储蓄系统开发(中级)
  20. VMware Workstation 虚拟机中的 虚拟机使用Windows 连接共享访问 Internet

热门文章

  1. canvas系列教程07 ——捕获、拖拽、抛掷、缓动动画、弹性动画
  2. 分享45个海量免费电子书下载网站
  3. python+adb实现自动刷抖音视频
  4. java 判断一个对象是否为空对象
  5. 【闲聊杂谈】深入剖析设计模式
  6. 1年工作经验的一个初中学历程序员的感悟
  7. 谷歌音乐搜索即将上线
  8. 硬核官宣:台积电官宣6nm及7nm加强版工艺!
  9. 短视频没有流量?满足3点需求,打造爆款就轻松了
  10. 2013年4月广告联盟行业网站综合影响力排名