PTA 03-树1 树的同构(25 分)

来源:互联网 发布:对数据进行分段统计 编辑:程序博客网 时间:2024/05/29 15:32
#include<iostream>#define Maxsize  10using namespace std;struct TreeNode{int left;int right;char index;}T1[Maxsize],T2[Maxsize];int isomorphic(int R1,int R2){if((R1==-1)&&(R2==-1))   return 1;if(((R1==-1)&&(R2!=-1))||((R1!=-1)&&(R2==-1)))   return 0;if(T1[R1].index!=T2[R2].index)    return 0;if((T1[R1].left==-1)&&(T2[R2].left)==-1)  return isomorphic(T1[R1].right,T2[R2].right);if((T1[R1].right==-1)&&(T2[R2].right)==-1)  return isomorphic(T1[R1].left,T2[R2].left);  if(((T1[R1].left!=-1)&&(T2[R2].left!=-1))&&((T1[T1[R1].left].index)==(T2[T2[R2].left].index)))  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(){char c1,c2;int n1,n2;int check[10];cin>>n1;int Root1=-1,Root2=-1;for(int i=0;i<n1;i++)  check[i]=0;for(int i=0;i<n1;i++){cin>>T1[i].index>>c1>>c2;if(c1!='-'){T1[i].left=c1-'0';check[T1[i].left]=1;}else  T1[i].left=-1;if(c2!='-'){T1[i].right=c2-'0';check[T1[i].right]=1;}  else  T1[i].right=-1;}for(int i=0;i<n1;i++){if(!check[i]){Root1=i;break;}}cin>>n2;for(int i=0;i<n2;i++){check[i]=0;}for(int i=0;i<n2;i++){cin>>T2[i].index>>c1>>c2;if(c1!='-'){T2[i].left=c1-'0';check[T2[i].left]=1;}else  T2[i].left=-1;if(c2!='-'){T2[i].right=c2-'0';check[T2[i].right]=1;}else  T2[i].right=-1;  }for(int i=0;i<n2;i++)   if(!check[i])   {     Root2=i;     break;   }   int k=isomorphic(Root1,Root2);     //cout<<Root1<<Root2<<endl;if(k)  cout<<"Yes"<<endl;else  cout<<"No"<<endl;return 0;  }

原创粉丝点击