#include <iostream>
using namespace std;
#define MaxTree 100
#define ElementType char
#define Tree int
#define Null -1
//用结构数组表示二叉树
struct TreeNode
{
ElementType Element;
Tree left;
Tree right;
}T1[MaxTree],T2[MaxTree];
//构建二叉树
Tree BuildTree(struct TreeNode T[])
{
int N;//表示结点个数
cin >> N;
int *check = new int[N];
char cl, cr;
int Root = -1;
int i;
if (N)
{
for (i = 0; i < N; i++)
{
check[i] = 0;
}
for (i = 0; i < N; i++)
{
cin >> T[i].Element >>cl>>cr;
if (cl != '-')
{
T[i].left = cl - '0';
check[T[i].left] = 1;
}
else
T[i].left = Null;
if (cr != '-')
{
T[i].right = cr - '0';
check[T[i].right] = 1;
}
else
T[i].right = Null;
}
for (i = 0; i < N; i++)
{
if (!check[i])
break;
}
Root = i;
}
return Root;
}
//判断树是否为同构
int Isomorphic(Tree R1, Tree R2)
{
if ((R1 == Null) && (R2 == Null))
return 1;
if (((R1 == Null) && (R2 != Null)) || ((R1 != Null) && (R2 == Null)))
return 0;
if (T1[R1].Element != T2[R2].Element)
return 0;
if ((T1[R1].left == Null) && (T2[R2].left ==Null)) return Isomorphic(T1[R1].right, T2[R2].right);
if (((T1[R1].left != Null) && (T2[R2].left != Null)) && ((T1[T1[R1].left].Element) == (T2[T2[R2].left].Element)))
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, R2;
R1 = BuildTree(T1);
R2 = BuildTree(T2);
if (Isomorphic(R1, R2))
cout << "Yes" << endl;
else
cout << "No" << endl;
return 0;
}
07-15
07-15
07-15
07-15
07-15
07-15
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交