03-树1 树的同构
来源:互联网 发布:python实现自动签到 编辑:程序博客网 时间:2024/06/05 00:12
#include<stdio.h>#define MaxTree 10#define ElementType char#define Tree int#define Null -1struct TreeNode //结构体数组{ ElementType Element; Tree Left; //记录左儿子的下标 Tree Right; //记录右儿子的下标}T1[MaxTree],T2[MaxTree];//T1,T2为全局变量 Tree BuildTree(struct TreeNode T[]){ int N,Root=-1; char cl,cr; scanf("%d\n",&N); int check[N]; //用来找出输入的序列中哪个是根节点 if(N){ for(int i=0;i<N;i++) check[i] = 0; //初始化数组,0代表没有父节点指向他 for(int i=0;i<N;i++){ scanf("%c %c %c\n",&T[i].Element,&cl,&cr); if(cl != '-'){ T[i].Left = cl - '0'; //读入的字符减去'0'就是数字了 check[T[i].Left] = 1; } else T[i].Left = Null; if(cr != '-'){ T[i].Right = cr - '0'; check[T[i].Right] = 1; } else T[i].Right = Null; } for(int i=0;i<N;i++) { if(!check[i]){ Root = i; //找出根节点 break; } } } return Root;}int Isomorphic(Tree R1,Tree R2){ if((R1==Null)&&(R2==Null)) return 1; if(((R1==Null)&&(R2!=Null))||((R1!=Null)&&(R2==Null))) //一个为空一个不为空 return 0; if(T1[R1].Element != T2[R2].Element) //根节点不同 return 0; if((T1[R1].Left == Null)&&(T2[R2].Left == Null)) //左边空,对比右边 return Isomorphic(T1[R1].Right,T2[R2].Right); if(((T1[R1].Left != Null)&&(T2[R2].Left != Null))&& ((T1[T1[R1].Left].Element)==(T2[T2[R2].Left].Element))) //两边左儿子相等而且右边儿子相等 return (Isomorphic(T1[R1].Left,T2[R2].Left)&&Isomorphic(T1[R1].Right,T2[R2].Right)); else return ((Isomorphic(T1[R1].Left,T2[R2].Right))&&(Isomorphic(T1[R1].Right,T2[R2].Left))); //左边和右边比较}int main(){ Tree R1,R2; R1 = BuildTree(T1); R2 = BuildTree(T2); if(Isomorphic(R1,R2)) printf("Yes\n"); else printf("No\n"); return 0;}
0 0
- 03-树1 树的同构
- 03-树1 树的同构
- 03-树1 树的同构
- 03-树1 树的同构
- 03-树1 树的同构
- 03-树1 树的同构
- 03-树1 树的同构
- 03-树1 树的同构
- 03-树1 树的同构
- 03-树1 树的同构
- 03-树1 树的同构
- 03-树1 树的同构
- 03-树1 树的同构
- 03-树1 树的同构
- 03-树1 树的同构
- 同构树的判别
- 树的同构
- SDUTOJ 树的同构
- Intellij idea 常用快捷键
- HDU 1242 Rescue (广搜 + 优先队列)
- Maven的pom.xml介绍
- PHP中提问频率最高的面试题和答案
- Shiro入门10:自定义Realm进行授权
- 03-树1 树的同构
- Java虚拟机
- 实验c++2-1
- mysql中innodb和myisam引擎的区别
- XSS攻击之HTTP代码注入
- u-boot分析导读
- 算法:折半查找或二分查找
- shell教程七:linux下的基本命令
- Maven的综合知识点