#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#define max 11
#define Null -1
typedef struct node tree;
struct node
{
int last;
int data;
int left;
int right;
};
//把第一个输入的二叉树储存为二叉树
int inserttree(tree T[], int A, int data) {
if (T[0].last == 0) {
T[0].data = data;
T[A].last++;
return A;
}
else if (A == Null) {
A = T[0].last;
T[A].data = data;
T[0].last+=1;
return A;
}
else if (data > T[A].data) {
if (T[A].right == Null) {
T[A].right = inserttree(T, T[A].right, data);
}
else {
return inserttree(T, T[A].right, data);
}
}
else if (data < T[A].data) {
if (T[A].left == Null) {
T[A].left = inserttree(T, T[A].left, data);
}
else {
inserttree(T, T[A].left, data);
}
}
}
tree* initlist(int N,tree* T){
T[0].last = 0;
for (int i = 0; i < max; i++) {
T[i].data = 0;
T[i].left = Null;
T[i].right = Null;
}
if (N) {
for (;N>0;N--)
{
int data = 0;
scanf("%d", &data);
inserttree(T,0,data);
}
}
return T;
}
int isomorphic(int R1, int R2, tree T1[], tree T2[]) {
if (R1 == Null && R2 == Null) return 1;
else if (R1 == Null && R2 != Null) return 0;
else if (R1 != Null && R2 == Null)return 0;
else if (T1[R1].data != T2[R2].data) return 0;
else if (T1[R1].left == Null && T2[R2].right == Null)
return isomorphic(T1[R1].right, T2[R2].left, T1, T2);
else if (T1[R1].right == Null && T2[R2].left == Null) {
return isomorphic(T1[R1].left, T2[R2].right, T1, T2);
}
//else if (T1[T1[R1].left].data != T2[T2[R2].left].data || T1[T1[R1].right].data != T2[T2[R2].right].data) {
// if (T1[T1[R1].right].data != T2[T2[R2].left].data)return 0;
// if (T1[T1[R1].left].data != T2[T2[R2].right].data)return 0;
//}
else {
int tmp1 = isomorphic(T1[R1].left, T2[R2].left, T1, T2);
int tmp2 = isomorphic(T1[R1].right, T2[R2].right, T1, T2);
if (tmp1 == 1 && tmp2 == 1) return 1;
else return 0;
}
}
int main() {
while (1) {
int N = 0;
int k = 0;
tree T[max][max];
scanf("%d", &N);
if (N == 0)break;
scanf("%d", &k);
for (int i = 0; i <= k; i++) {
initlist(N, T[i]);
}
for (int a = 1; a <= k; a++) {
int ans = isomorphic(0, 0, T[0], T[a]);
if (ans == 0)printf("no\n");
else if (ans == 1)printf("yes\n");
}
}
return 0;
}
写完测试没问题,结果酱紫错,很难接受哇