1. 程式人生 > >凜冬之翼----樹的同構

凜冬之翼----樹的同構

這是我的第一篇在CSDN上寫的文章,內容是樹的同構,這個看似簡單的程式碼花費了很多的時間,看來要練到刷題大佬的地步還需要很多時間啊。
下面開始總結:
1、int main(){ } 後面的()一定不要忘記了!
2、在呼叫函式的時候一定要申明資料型別 如 int 指標 之類!
3、一定要完全弄懂原理在下手寫程式碼,不然後期debug非常的困難!
下面是程式碼:

#include<stdio.h>
#define MaxTree 10
#define ElementType char
#define Tree int
#define Null -1
struct TreeNode{
ElementType Element; Tree Left; Tree Right; }T1[MaxTree],T2[MaxTree]; Tree BuildTree(struct TreeNode T[]){ int N,i,Root=-1; int check[11]; char cl,cr; scanf("%d",&N); getchar(); for(i=0;i<N;i++) check[i]=0; //set all check[]=0 if(!N) return Null; if(N){ for(i=0;i<N;i++){
scanf("%c %c %c",&T[i].Element,&cl,&cr); getchar(); //to absorb the Enter char if(cl!='-'){ T[i].Left=cl-'0'; // to make the type of char into int 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(i=0;i<N;i++) if(!check[i]) return i; } int Isomorphic(Tree R1,Tree R2){ //printf("%c %c",T1[R1].Element,T2[R2].Element); if(R1==Null&&R2==Null) // root is null return 1; //printf("1"); if(R1==Null&&R2!=Null) // one have root another don't return 0; //printf("2"); if(R1!=Null&&R2==Null) return 0; if(T1[R1].Element!=T2[R2].Element) //the element of root is different return 0; //printf("3"); if(T1[R1].Left==Null&&T2[R2].Left==Null) //the left of root is Null return Isomorphic(T1[R1].Right,T2[R2].Right); // printf("4"); if(T1[T1[R1].Left].Element==T2[T2[R2].Left].Element) //the left of root is the same 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); }