PTA 03-樹1 樹的同構(25 分)
阿新 • • 發佈:2019-02-12
#include<iostream> #define Maxsize 10 using 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; }