18. 树的子结构(C++版本)
使用二叉树的相关定义及函数在:二叉树最小结构(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++版本)相关推荐
- 【剑指offer-Java版】18树的子结构
树的子结构:输入两棵二叉树A B,判断B是不是A的子结构 就是一个递归加上一个树的先序遍历 public class _Q18 {public boolean HasSubTree(BinaryTre ...
- 【剑指Offer】18树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 时间限制:1秒:空间限制:32768K 解题思路 解题思路分为两步,主要用到了递归的方法.第一步先 ...
- [剑指offer]面试题18:树的子结构
面试题18:树的子结构 题目:输入两棵二叉树A和B,判断B是不是A的子结构.二叉树结点的定义如下: struct BinaryTreeNode {int value;BinaryTreeNode *l ...
- 【重点递归】剑指offer——面试题18:树的子结构
剑指offer--面试题18:树的子结构 Solution1: 此题答案是抄的书上的,要记忆并熟练运用关于二叉树的递归思想!!! /* struct TreeNode {int val;struct ...
- 【LeetCode】树的子结构二叉树的镜像对称的二叉树
17.树的子结构 题目: 输入两棵二叉树A和B,判断B是不是A的子结构.(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值. 题解: recur函数,递归判断两 ...
- 剑指offer:面试题26. 树的子结构
题目:树的子结构 输入两棵二叉树A和B,判断B是不是A的子结构.(约定空树不是任意一个树的子结构) B是A的子结构, 即 A中有出现和B相同的结构和节点值. 例如: 给定的树 A: 3 / \ ...
- 剑指offer_第17题_树的子结构_Python
题目描述 输入两棵二叉树A,B 判断B是不是A的子结构. 其中空树不是任意一个树的子结构 class TreeNode:def __init__(self, x):self.val = xself.l ...
- 剑指offer:树的子结构
题目 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 解题思路 暴力做法 取出树A/B的前序.中序: 判断这两个数组是否A都包含B,是则true. 前序和中 ...
- 《剑指Offer》题目:树的子结构
题目描述:树的子结构 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题目分析:此题可以拆成两题,1.在二叉树中查找是否存在某个结点:2.判断两个二叉树是否 ...
- 剑指Offer_17_树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 解题思路 首先判断 A 和 B 是否是空,如果为空,返回false:否则找到 A 和 B 的根结点 ...
最新文章
- 《机器学习》、《算法数据结构》、《LeetCode原创题解》开放下载!
- 自助用户选择VM Network
- 【汇编语言(第3版)王爽】第八章学习内容
- Taro+react开发(27)别加view
- redhad yum 安装mysql_redhat7通过yum安装mysql5.7.17教程
- java script 技巧_java script 技巧
- java中LinkedList类的操作
- SpringBoot2.0之六 多环境配置
- xtarbackup 安装
- sql提取字符串中的一部分数据_学会这三招提取字符串中的数字不用愁
- 企业上云势不可挡 安全策略该如何制定?
- SQL:Incorrect string value: ‘\xC2\xA92021...‘ for column ‘site_copy‘ at row 1解决方案
- SketchUp草图大师制作分析图的详细流程介绍
- linux刷新解析,如何在Linux(和FreeBSD)上刷新DNS解析器缓存
- 利用javascript动态生成表格及注释
- C语言 打印乘法口诀表
- android 魅族手机bug多,魅族Flyme出现大面积Bug
- ps3自建服务器,PS3新手图文教程之网络设置
- win 10 添加网络位置提示【输入的文件夹似乎无效,请选择另一个】解决办法
- 淘宝新手开店可掌握的爆款核心思路