首页 > 学院 > 开发设计 > 正文

如何判断两颗二叉树同构

2019-11-08 20:31:12
字体:
来源:转载
供稿:网友

#define MaxTree 10#define ElementType char#define Tree int#define Null -1struct TreeNode{ElementType Element; Tree Left;Tree Right; }T1[MaxTree],T2[MaxTree],T[MaxTree];int main(){Tree R1,R2;R1=BuildTree(T1);R2=BuildTree(T2);if(Isomorphic(R1,R2)) PRintf("Yes/n");else printf("No/n"); return 0;} Tree BuildTree(struct TreeNode T[])//如何建二叉树 { if(N){for(i=0;i<N;i++) check[i]=0;for(i=0;i<N;i++){scanf("%c %c %c/n",&T[i].Element,&cl,&cr);if(cl!='-'){T[i].Left=cl-'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;//对cr的对应处理 }for(i=0;i<N;i++)if(!check[i]) break;Root=i;}return Root;}int Isomorphic(Tree R1,Tree R2)//如何判别两二叉树同构 {if((R1==Null)&&(R2==Null))//both emptyreturn 1;if((R1==Null)&&(R2==Null)||((R1!=Null)&&(R2!=Null)))return 0;//one of them is emptyif(T1[R1].Element!=T2[R2].Element)return 0;//roots are differentif((T1[R1].Left==Null)&&(T2[R2].Left==Null))//both have no left subtreereturn 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)))  //no need to swap the left and the right  return(Isomorphic(T1[R1].Left,T2[R2].Left)&&    Isomorphic(T1[R1].Right,T2[R2].Right));else//need to swap the left and the rightreturn(Isomorphic(T1[R1].Left,T2[R2].Right)&&   Isomorphic(T1[R1].Right,T2[R2].Left));} 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表