思路:
https://www.cnblogs.com/yuxiaoba/p/8329986.html
代码:
#include <iostream>
#define Tree int
using namespace std;
typedef struct TreeNode{
Tree left,right;
char data;
}TreeNode;
TreeNode T1[10],T2[10];
Tree BuildTree(struct TreeNode T[]){
int n;
cin>>n;
int check[10]={0};
char cl,cr;
Tree root = -1;
if(n){
for(int i=0;i<n;i++){
cin>>T[i].data>>cl>>cr;
if(cl!='-'){
T[i].left = cl-'0';
check[T[i].left]=1;
}
else if(cl=='-'){
T[i].left=-1;
}
if(cr!='-'){
T[i].right = cr-'0';
check[T[i].right]=1;
}
else if(cr=='-'){
T[i].right=-1;
}
}
for(int i=0;i<n;i++){
if(!check[i]){
root = i;
break;
}
}
}
return root;
}
int Isomorphic(Tree R1,Tree R2){
if(R1==-1&&R2==-1) //都为空
return 1;
if(((R1==-1)&&(R2!=-1))||((R2==-1)&&(R1!=-1))) //一个空,一个非空
return 0;
if(T1[R1].data!=T2[R2].data) //数据不同
return 0;
if(T1[R1].left==-1&&T2[R2].left==-1) //左子树都为空
return Isomorphic(T1[R1].right, T2[R2].right);
if(T1[R1].left!=-1&&T2[R2].left!=-1&&T1[T1[R1].left].data==T2[T2[R2].left].data) //都有左子树,且左子树数据相同
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(){
Tree R1=BuildTree(T1);
Tree R2=BuildTree(T2);
if( Isomorphic(R1,R2)){
printf("Yes\n");
}
else{
printf("No\n");
}
return 0;
}