题目:

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

知识点:

注意:

注意想法的递归实现(好好琢磨一下,不然可能会忘!)

代码实现:

具体实现分两步:1.遍历树1,找到与树2根节点值一样的节点;2进一步判断树1中value一样的节点的子节点是否和树2一致,一致返回,不一致继续遍历

/****树的子结构*****//*判断两数是否相等*/
bool equal(int num1, int num2)
{if ((num1 - num2) > (-0.000001) && (num1 - num2) < 0.000001) {return true;}else return false;
}
/*树1是否包含树2*/
bool isTree1HasTree2(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2)
{//若递归后,pRoot2先为空,则包含if (pRoot2 == nullptr)return true;//若递归后,pRoot1先为空,则不包含if (pRoot1 == nullptr)return false;//若递归后,pRoot1和pRoot2对应的值不等,则也不包含if (!equal(pRoot1->m_nValue, pRoot2->m_nValue))return false;//同时递归左子树和右子树return isTree1HasTree2(pRoot1->m_pLeft, pRoot2->m_pLeft)&& isTree1HasTree2(pRoot1->m_pRight, pRoot2->m_pRight);
}
/*遍历树,找与树2相同的根节点*/
bool HasSubtree(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2)
{   bool result = false;//若全不为空才有意义if (pRoot1 != nullptr && pRoot2 != nullptr) {//如果两值相等,进行第二步判断if (equal(pRoot1->m_nValue, pRoot2->m_nValue)) {result = isTree1HasTree2(pRoot1, pRoot2);}//若根节点没包含,遍历左子树if(!result)result = HasSubtree(pRoot1->m_pLeft, pRoot2);//若左子树没有,遍历右子树if(!result)result = HasSubtree(pRoot1->m_pRight, pRoot2);}return result;
}int main()
{   bool result = false;BinaryTreeNode* pNodeA1 = CreateBinaryTreeNode(8);BinaryTreeNode* pNodeA2 = CreateBinaryTreeNode(8);BinaryTreeNode* pNodeA3 = CreateBinaryTreeNode(7);BinaryTreeNode* pNodeA4 = CreateBinaryTreeNode(9);BinaryTreeNode* pNodeA5 = CreateBinaryTreeNode(2);BinaryTreeNode* pNodeA6 = CreateBinaryTreeNode(4);BinaryTreeNode* pNodeA7 = CreateBinaryTreeNode(7);ConnectTreeNodes(pNodeA1, pNodeA2, pNodeA3);ConnectTreeNodes(pNodeA2, pNodeA4, pNodeA5);ConnectTreeNodes(pNodeA5, pNodeA6, pNodeA7);BinaryTreeNode* pNodeB1 = CreateBinaryTreeNode(8);BinaryTreeNode* pNodeB2 = CreateBinaryTreeNode(9);BinaryTreeNode* pNodeB3 = CreateBinaryTreeNode(3);ConnectTreeNodes(pNodeB1, pNodeB2, pNodeB3);result = HasSubtree(pNodeA1, pNodeB1);cout << result << endl;getchar();return 0;
}

剑指offer——26.树的子结构(不太熟)相关推荐

  1. 左神算法:判断 t1 树是否包含t2 树全部的拓扑结构(剑指 Offer 26. 树的子结构,Java版)

    本题来自左神<程序员代码面试指南>"判断 t1 树是否包含t2 树全部的拓扑结构"题目. 题目 剑指 Offer 26. 树的子结构 给定彼此独立的两棵树头节点分别为 ...

  2. 【LeetCode】剑指 Offer 26. 树的子结构

    [LeetCode]剑指 Offer 26. 树的子结构 文章目录 [LeetCode]剑指 Offer 26. 树的子结构 package offer;//定义树节点 class TreeNode{ ...

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

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

  4. LeetCode——剑指 Offer 26. 树的子结构

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

  5. 剑指offer 26 树的子结构

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

  6. 剑指 Offer 26树的子结构(相关话题:对称性递归,在线算法)

    目录 开篇引言 题目描述 代码实现 题目拓展 拓展解读 一类 100. 相同的树

  7. 剑指offer:树的子结构

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

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

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

  9. 剑指offer之树的子结构

    1 题目 输入两颗二叉树A和B,判断B是不是A的子结构(B树是A树的子结构) 比如:                   2     树A    3    5      树B   5         ...

最新文章

  1. 我在 GitHub 上发现了一款骚气满满的字体!
  2. 使用Capture画原理图
  3. 合并报表编制采用的理论_合并报表操作的整体思路梳理
  4. 陷入迷茫的时候怎么办呢?
  5. vue 打包路由报错_Vue下路由History模式打包后页面空白的解决方法
  6. 拥抱变化——从Atlas到ASP.NET AJAX(4):大大简化的了的Extender扩展器控件
  7. Algs4-2.3.25切换到插入排序的试验
  8. mysql的基本语句
  9. thinkphp框架知识点
  10. Codeforces Gym 100187E E. Two Labyrinths bfs
  11. 《计算机网络 自顶向下方法》 第1章 计算机网络和因特网
  12. Spring Security简介和认识
  13. [视频教程][斯坦福大学公开课:ios7应用开发 18集]
  14. ERROR: configuration failed for package ‘stringi’
  15. python大数据工程师需要掌握哪些_大数据工程师 python
  16. 华硕主板电脑开机后一直反复进入BIOS界面解决办法(其中之一)
  17. SPSS 自动线性建模 模型导出方法
  18. 山东计算机专业民办大学排名,2020年山东最好的民办大学排名
  19. python爬虫实现股票数据存储_Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储!...
  20. 随机森林-sklearn

热门文章

  1. Python 的PIL,可以解决ImportError The _imagingft C module is not installed
  2. [IDL入门] 两个PPT,IDL上手
  3. Hibernate初次搭建与第一个测试例子
  4. PLSQL连接Oracle报错 ORA-12154 标识符
  5. 有了数据湖,距离数据仓库消失还有几年?
  6. 为什么做的报表领导不满意,如何提升报表的价值?
  7. java中this,super,extends,implements相关继承概念讲解
  8. ctc网络结构中接口服务器信号交换的方式有哪些,通信工程复习资料
  9. java 类继承命名_Java 语言的类间的继承关系是( )。_学小易找答案
  10. java读mysql增量_如何复制行并在MySQL中使用自动增量字段插入同一个表?