使用二叉树的相关定义及函数在:二叉树最小结构(C++版本)

实现原理:
首先在主树中找到节点值等于子树根节点值的节点。如果找不到,返回false。
以找到的节点作为根节点,与子树进行比较。

实现代码:


bool DoesTreeHasSubTree(BinaryTreeNode* pMainRoot, BinaryTreeNode* pSubRoot)
{if (nullptr == pMainRoot&& nullptr == pSubRoot) return true; // 主树子树都为空,返回falseelse if (nullptr == pSubRoot) return true;  // 子树为空,返回trueelse if (nullptr == pMainRoot) return false; // 主树为空,返回falseif (pMainRoot->data != pSubRoot->data) return false; // 两棵树的当前节点值不相等,不用再比较,直接返回false// 还需要继续左子树判断、右子树判断。注意使用的是“&&”操作符,以便当左子树不满足条件返回false,右子树就无需再比较(短路原则)return DoesTreeHasSubTree(pMainRoot->pLeft, pSubRoot->pLeft) && DoesTreeHasSubTree(pMainRoot->pRight, pSubRoot->pRight);
}bool HasSubTree(BinaryTreeNode* pMainRoot, BinaryTreeNode* pSubRoot)
{if (nullptr == pMainRoot&& nullptr == pSubRoot) return true;else if (nullptr == pSubRoot) return true; else if (nullptr == pMainRoot) return false;bool isSubTree = false;// 主树中找到节点值等于子树根节点的值,以该节点为根,与子树进行比较if (pMainRoot->data == pSubRoot->data) isSubTree = DoesTreeHasSubTree(pMainRoot, pSubRoot);// 如果不满足,继续在左子树中查找if (!isSubTree) isSubTree = HasSubTree(pMainRoot->pLeft, pSubRoot);// 如果不满足,继续在右子树中查找if (!isSubTree) isSubTree = HasSubTree(pMainRoot->pRight, pSubRoot);return isSubTree;
}bool HasSubTree(MyBinaryTree& binTree1, MyBinaryTree& binTree2)
{return HasSubTree(binTree1.pRoot, binTree2.pRoot);
}

18. 树的子结构(C++版本)相关推荐

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

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

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

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 时间限制:1秒:空间限制:32768K 解题思路 解题思路分为两步,主要用到了递归的方法.第一步先 ...

  3. [剑指offer]面试题18:树的子结构

    面试题18:树的子结构 题目:输入两棵二叉树A和B,判断B是不是A的子结构.二叉树结点的定义如下: struct BinaryTreeNode {int value;BinaryTreeNode *l ...

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

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

  5. 【LeetCode】树的子结构二叉树的镜像对称的二叉树

    17.树的子结构 题目: 输入两棵二叉树A和B,判断B是不是A的子结构.(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值. 题解: recur函数,递归判断两 ...

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

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

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

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

  8. 剑指offer:树的子结构

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

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

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

  10. 剑指Offer_17_树的子结构

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

最新文章

  1. 《机器学习》、《算法数据结构》、《LeetCode原创题解》开放下载!
  2. 自助用户选择VM Network
  3. 【汇编语言(第3版)王爽】第八章学习内容
  4. Taro+react开发(27)别加view
  5. redhad yum 安装mysql_redhat7通过yum安装mysql5.7.17教程
  6. java script 技巧_java script 技巧
  7. java中LinkedList类的操作
  8. SpringBoot2.0之六 多环境配置
  9. xtarbackup 安装
  10. sql提取字符串中的一部分数据_学会这三招提取字符串中的数字不用愁
  11. 企业上云势不可挡 安全策略该如何制定?
  12. SQL:Incorrect string value: ‘\xC2\xA92021...‘ for column ‘site_copy‘ at row 1解决方案
  13. SketchUp草图大师制作分析图的详细流程介绍
  14. linux刷新解析,如何在Linux(和FreeBSD)上刷新DNS解析器缓存
  15. 利用javascript动态生成表格及注释
  16. C语言 打印乘法口诀表
  17. android 魅族手机bug多,魅族Flyme出现大面积Bug
  18. ps3自建服务器,PS3新手图文教程之网络设置
  19. win 10 添加网络位置提示【输入的文件夹似乎无效,请选择另一个】解决办法
  20. 淘宝新手开店可掌握的爆款核心思路

热门文章

  1. legend---六、php脚本变量的生命周期是怎样的
  2. iOS之01-基本语法
  3. rman异机恢复数据库
  4. 10.XSD 元素替换
  5. 3. wordpress 固定链接
  6. jsp include参数传送接收与应用
  7. 应用安全 - Web安全 - 上传漏洞 - 攻防
  8. linux下gdb调试查看源代码
  9. 学习MyBatis之简单入门HelloWorld
  10. java Servlet文件拷贝的模板代码