判断树 B 是不是 树 A 的子树
来源:互联网 发布:什么是数据审计追踪 编辑:程序博客网 时间:2024/05/16 10:28
#include <iostream>using namespace std;/** 描述:判断树 B 是否属于树 A 相当于,对树进行遍历的比较,当比较到树 B 的叶子为空时结束 注意:判断 树 A 和 树 B 是否为空的情况 注意这里生成树的规则是按照二叉树的前序遍历生成的,所以比较也要按照这个规则 **/typedef struct BiNode{ int value; struct BiNode * rightChildNode; struct BiNode * leftChildNode;}BiNode;typedef BiNode * BiLink;int Nil = 0;int nodeValue1[100]={1,2,4,0,6,0,0,5,0,7,0,0,3};int nodePoint1 = 0;int nodeValue2[100]={1,0,3};int nodePoint2 = 0;void initBiTree(BiLink * head,int type){ int value; if(type == 1) value = nodeValue1[nodePoint1++]; else value = nodeValue2[nodePoint2++]; if(value == 0) *head = NULL; else{ *head = (BiLink)malloc(sizeof(BiNode)); (*head)->value = value; if(type == 1){ initBiTree(&(*head)->leftChildNode,1); initBiTree(&(*head)->rightChildNode,1); }else{ initBiTree(&(*head)->leftChildNode,2); initBiTree(&(*head)->rightChildNode,2); } }}// 遍历比较 树 A 和 树 B 的结点bool DoesTree1HaveTree2(BiLink T1 , BiLink T2){ // T2 为空证明遍历完毕 if(T2 == NULL) return true; if(T1 == NULL) return false; if(T1->value != T2->value) return false; return DoesTree1HaveTree2(T1->leftChildNode, T2->leftChildNode)&& DoesTree1HaveTree2(T1->rightChildNode, T2->rightChildNode);}// 判断树 A 和 树 B 关系的函数bool HasSubTree(BiLink T1 , BiLink T2){ bool result = false; if(T1 != NULL && T2 !=NULL){ if(T1->value == T2->value) result = DoesTree1HaveTree2(T1,T2); if(!result) result = HasSubTree(T1->leftChildNode, T2); if(!result) result = HasSubTree(T1->rightChildNode, T2); } return result;}void PreOrderTraverse(BiLink T){ if(T == NULL) return; cout<<T->value<<" "<<endl; PreOrderTraverse(T->leftChildNode); PreOrderTraverse(T->rightChildNode);}int main(int argc, const char * argv[]) { BiLink T1 = NULL; BiLink T2 = NULL; initBiTree(&T1, 1); initBiTree(&T2, 2); cout<<HasSubTree(T1, T2)<<endl; return 0;}
0 0
- 判断二叉树B是不是二叉树A的子树
- 判断树 B 是不是 树 A 的子树
- 树的子结构——判断B树是不是A树的一颗子树
- 剑指Offer--018-树的子结构(判断B树是不是A树的一颗子树)
- 剑指offer:B是不是A的子树
- 判断a树是否是b树的子树
- 判断B树是否是A的子树
- 判断一棵树是不是另一棵树的子树
- 剑指offer15--判断一个二叉树是不是另一个的子树
- 判断一棵树是不是另一棵树的子树
- 如何判断一棵树是不是另一棵树的子树
- 判断树B是否为树A的子树&&求出树的镜像
- 判断树a是否是树b的子树--递归递归递归
- 判断二分查找树A是否是二分查找树B的子树
- 输入两颗二叉树A,B,判断B是不是A的子结构。
- java实现:输入两颗二叉树A,B,判断B是不是A的子结构
- 输入两颗二叉树A,B,判断B是不是A的子结构
- 输入两颗二叉树A和B,判断B是不是A的子结构
- 3、Java内存模型
- web 服务器 rewrite配置 虚拟域名设置
- leetcode--Same Tree
- Bootstrap实现瀑布流照片显示
- 选择排序—简单选择排序
- 判断树 B 是不是 树 A 的子树
- Java学习之迭代器详解
- Redis集群安装
- ros+matlab
- 为什么使用 Go 语言?
- 策略模式
- leetcode--Maximum Subarray
- Android多媒体播放的生命周期
- 最少换乘 第八届河南省程序设计大赛