题目描述

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
这题分两步:
第1:在树A中找到和树B的根节点的值一样的节点R,注意树的节点值可以有多个相同的值。
第2:判断树A中以R为根节点的子树是不是包含和B一样的树结构。
这题难在递归基和判断树节点为空该返回什么,一定要记清楚找头结点的时候遇到空节点就返回错,helper函数如果子树为空,还有就是result的使用。
说明已经匹配完了,返回true;如果是树A为空,说明匹配不到子树,返回false。
理解难点:helper每次返回以该根节点开始的是否匹配,然后判断左子树和右子树是否匹配。
/*
struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}
};*/
class Solution {
public:bool helper(TreeNode* pRoot1, TreeNode* pRoot2){if(pRoot2 == nullptr){return true;}if(pRoot1 == nullptr){return false;}if(pRoot1 -> val != pRoot2 -> val){return false;}return helper(pRoot1 -> left,pRoot2 -> left) && helper(pRoot1 -> right,pRoot2 -> right);}bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2){if(pRoot1 == nullptr || pRoot2 == nullptr){return false;}bool result = false;if(pRoot1 -> val == pRoot2 -> val){result = helper(pRoot1,pRoot2);}if(!result){result = helper(pRoot1 -> left,pRoot2);}if(!result){result = helper(pRoot1 -> right,pRoot2);}return result;}
};

/*
struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}
};*/
class Solution {
public:bool helper(TreeNode* pRoot1, TreeNode* pRoot2){if(pRoot2 == nullptr){return true;}if(pRoot1 == nullptr){return false;}if(pRoot1 -> val != pRoot2 -> val){return false;}return helper(pRoot1 -> left,pRoot2 -> left) && helper(pRoot1 -> right,pRoot2 -> right);}bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2){if(pRoot1 == nullptr || pRoot2 == nullptr){return false;}if(pRoot1 -> val == pRoot2 -> val){if(helper(pRoot1,pRoot2)){return true;}}return helper(pRoot1 -> left,pRoot2) ||  helper(pRoot1 -> right,pRoot2);}
};

转载于:https://www.cnblogs.com/dingxiaoqiang/p/7932038.html

16 树的子结构(这题多复习)相关推荐

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

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

  2. 牛客网(剑指offer) 第十七题 树的子结构

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) <?php/*class TreeNode{var $val;var $left = NUL ...

  3. [剑指offer][JAVA]面试题第[26]题[树的子结构][递归]

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

  4. 北大软微计算机应用基础真题,北京大学软微考研参考书、考研真题及复习经验...

    原标题:北京大学软微考研参考书.考研真题及复习经验 考试科目 电子信息 ① 101 思想政治理论 ② 201 英语一 ③ 301 数学一 ④ 869 计算机基础综合 ① 101 思想政治理论 ② 20 ...

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

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

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

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

  7. 【无取巧解法,易于理解!】剑指 Offer 26. 树的子结构

    看题解时,很多大牛用很少的代码就完成了AC,但可能看了很多遍也看不懂,因此萌生了写一种最"笨"最完整的代码的想法,这样大家可以通过我的代码入门,看懂了再去挑战大牛们的简洁解法. 输 ...

  8. 【重点递归】剑指offer——面试题18:树的子结构

    剑指offer--面试题18:树的子结构 Solution1: 此题答案是抄的书上的,要记忆并熟练运用关于二叉树的递归思想!!! /* struct TreeNode {int val;struct ...

  9. Oracle(11g)数据库教程之十:Oracle操作题 (复习课)

    Oracle(11g)数据库教程之十:Oracle操作题 (复习课) 操作题 Sutdent表的定义 字段名 字段描述 数据类型 主键 非空 Id 学号 INT(10) 是 是 Name 姓名 VAR ...

最新文章

  1. C++中Reference与指针(Pointer)的使用对比
  2. 正在中止线程 异常处理
  3. 统计学(第七版)贾俊平课后习题数据
  4. 玩转openpyxl,用python制作一个公司租车记录登记表!
  5. 北京专科计算机学校排名及分数线,北京专科大学排名及分数线
  6. 【智能工厂】智能工厂4.0:数字世界和物理世界的融合
  7. word只能以安全模式打开
  8. 流氓软件和骚扰电话是时候该清理下了
  9. jetson windows_Jetson nano 配置远程桌面
  10. 《Excel高手捷径:一招鲜,吃遍天》一第3招 快捷键的妙用
  11. 初中语文古诗词作者生平归纳
  12. android extra_shortcut_icon,Android自动创建shortcut
  13. 为什么说每个人适合的大数据培训课程都可能存在差异?
  14. windows文件同步工具
  15. 在 Java 中将毫秒转换为天、小时、分钟和秒
  16. Java中在银行系统中有账户类型,进行基本存取款操作
  17. 信息化监理在验收阶段的角色
  18. seo应用无处不在,seo可以应用到哪些方面?
  19. html5网站粒子时钟,利用HTML5实现SVG多边形粒子时钟动画特效
  20. buuctf[MRCTF2020]Ez_bypass

热门文章

  1. LeetCode 73. 矩阵置零(两个标记变量)
  2. 4个常用的计算机应用软件,信息技术应用--常用计算机工具软件4常用工具软件单元四.pdf...
  3. vb编写各种趣味小程序_【VB小程序】来测测你的打字速度吧
  4. 用python画风车_用Python画小女孩放风筝的示例
  5. SpringMVC静态资源问题
  6. span标签显示固定长度显示省略号,光标放上显示全部
  7. 【前端后端运维】Web开发人员学习路线,汇总整理
  8. armhf php环境搭建,armel、armhf 和 arm64 区别选择
  9. java命令行编译命令_Java使用命令行编译运行程序
  10. python数据分析第二讲_七月在线 Python数据分析 第二课 Numpy