#include<bits/stdc++.h>
using namespace std;
struct node{
char a;
int right;
int left;
}T1[10],T2[10];
int buid(node T[]);
int is(int r1,int r2);
int main()
{
int r1,r2;
r1=buid(T1);
r2=buid(T2);
if(is(r1,r2))
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
return 0;
}
int buid(node T[])//找到树根
{
int N;
cin>>N;
char L,R;
int root=-1;//把root的初始值设置为-1
int check[1000]={0};
if(N)
{
for(int i=0;i<N;i++)
{
cin>>T[i].a>>L>>R;
if(L!='-')
{
T[i].left=L-'0';
check[T[i].left]=1;
}
else
T[i].left=-1;
if(R!='-')
{
T[i].right=R-'0';
check[T[i].right]=1;
}
else
T[i].right=-1;
}
for(int i=0;i<N;i++)
if(!check[i])
{
root=i;
break;
}
}
return root;
}
int is(int r1,int r2)//以树根来开始判断
{
if((r1==-1)&&(r2==-1))//都没有树根,对应了root的初始值-1
return 1;
if(((r1==-1)&&(r2!=-1))||((r1!=-1)&&(r2==-1)))
return 0;
if(T1[r1].a!=T2[r2].a)
return 0;
if((T1[r1].left==-1)&&(T2[r2].left==-1))
return is(T1[r1].right,T2[r2].right);
if(((T1[r1].left!=-1)&&(T2[r2].left!=-1))&&((T1[T1[r1].left].a)==(T2[T2[r2].left].a)))//左左判断,右右判断
return (is(T1[r1].left,T2[r2].left)&&is(T1[r1].right,T2[r2].right));
else//左右判断
return (is(T1[r1].left,T2[r2].right)&&is(T1[r1].right,T2[r2].left));
}
静态链表的应用
注意逻辑关系