树的子结构(剑指offer18)
来源:互联网 发布:深入浅出html5编程 pdf 编辑:程序博客网 时间:2024/06/05 15:26
题目:输入两棵二叉树A和B,判断B是不是A的子结构。二叉树的结点定义如下:
struct BinaryTreeNode {int m_nValue;BinaryTreeNode* m_pLeftChild;BinaryTreeNode* m_pRightChild;};
思路:判断B是不是A的子树,先判断树B的根是否与A树的某子树的根结点是否一致,我们可以通过遍历二叉树数A的每一个结点,比较其是否与树B的根结点一样。如果找到满足添加的结点,我们分别比较其左右子树的根结点是否一致,可以利用递归重复上一步骤。
//有两棵二叉树A、B,判断B是否是A的子树bool isSubTree(BinaryTreeNode* pRootA, BinaryTreeNode* pRootB) {bool result = false;if (NULL == pRootA || NULL == pRootB) {return result;}//判断根结点是否一致if (pRootA->m_nValue == pRootB->m_nValue) {result = isAHasSubTreeB(pRootA, pRootB);}//如果根结点不一致,则比较与左子树的根是否一致if (!result) {result = isAHasSubTreeB(pRootA->m_pLeftChild, pRootB);}//如果左子树也不一致,则比较与右子树的根是否也一致if (!result) {result = isAHasSubTreeB(pRootA->m_pRightChild, pRootB);}return result;}//判断其子树是否满足条件bool isAHasSubTreeB(BinaryTreeNode* pRootA, BinaryTreeNode* pRootB) {//如果B树没有结点if (NULL == pRootB) {return true;}//如果B有结点而A没有对应的结点if (NULL == pRootA) {return false;}//判断根结点是否一致if (pRootA->m_nValue != pRootB->m_nValue) {return false;}//递归判断左右子树return isAHasSubTreeB(pRootA->m_pLeftChild, pRootB->m_pLeftChild)&& isAHasSubTreeB(pRootA->m_pRightChild, pRootB->m_pRightChild);}
测试代码
/* * * Created on: 2014-3-23 15:13:11 * Author: danDingCongRong */#include <stddef.h>#include <iostream>using namespace std;int main() {int n = 0;cout << "输入测试数据的组数:" << endl;cin >> n;while (n) {cout << "按先序序列创建二叉树:" << endl;BinaryTreeNode* pABinaryTree = NULL;pABinaryTree = createIntBinaryTree();cout << "按先序序列创建二叉树:" << endl;BinaryTreeNode* pBBinaryTree = NULL;pBBinaryTree = createIntBinaryTree();bool result = isSubTree(pABinaryTree, pBBinaryTree);if (result) {cout << "B是A的子结构。" << endl;} else {cout << "B不是A的子结构。" << endl;}--n;}return 0;}
注:部分内容参考自剑指offer
0 0
- 树的子结构(剑指offer18)
- 剑指Offer18树的子结构
- 剑指offer18:树的子结构
- 剑指Offer18:树的子结构
- 剑指offer18——树的子结构
- 【面试题】剑指offer18--判断一个二叉树是否为另一个二叉树的子结构
- 剑指offer18--旋转的方式打印矩阵
- 【面试题】剑指offer18
- 树的子结构
- 树的子结构
- 树的子结构
- 树的子结构
- 树的子结构
- 树的子结构
- 树的子结构
- 树的子结构
- 树的子结构
- 树的子结构
- Debian 虚机设置相关
- 相关系数
- 选择器——CSS基础
- 【SPLAY】NOI2005 维护数列
- html实时显示系统时间,并实时刷新到秒
- 树的子结构(剑指offer18)
- Intel力推低价平板策略的利好与隐忧
- win7系统实现定时关机功能
- C++拾遗之1---初步体验项目5-求四个数的升序排序
- AndroidUI FragmentTabHost类完成 底部导航布局功能
- 让你此生难成大器的七宗罪
- 页面加载时候就请求action和struts2通配符过滤(未迁入)
- android实现背景平铺的三种方法
- 动态内存分配管理(一)