题意:给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。判断给定两个二叉树是否是同构树。
思路:我觉得同构即对应节点的孩子相同,即相减后结果为0。所以逐个判断两棵树对应节点的孩子相减的结果是否为0即可判断是否为同构树。因为数据为字母,所以可以用数组下标快速找到每个节点。
#include<stdio.h>
struct node{
char right;
char left;
}al1[26],al2[26]; //构建两颗树,其中下标即为树节点的值
int main()
{
int N,i;
char c1[10],r1[10],l1[10];
char c2[10],r2[10],l2[10];
scanf("%d",&N);
getchar();
for(i=0;i<N;i++){ //读入第一棵树数据
scanf("%c %c %c",&c1[i],&r1[i],&l1[i]);
getchar();
}
for(i=0;i<N;i++){ //构建第一棵树
al1[c1[i]-'A'].right=r1[i]=='-'?'-':c1[r1[i]-'0'];
al1[c1[i]-'A'].left=l1[i]=='-'?'-':c1[l1[i]-'0'];
}
/*for(i=0;i<N;i++){ //判断树是否构建准确
printf("%c %c %c\n",c1[i],al1[c1[i]-'A'].right,al1[c1[i]-