您的位置:首页 > 理论基础 > 数据结构算法

SDUT 3340 数据结构实验之二叉树一:树的同构

2016-08-01 11:28 405 查看
点击打开题目链接

点击打开视屏链接:第三讲树,小白专场




#include <bits/stdc++.h>
#define Null -1
using namespace std;

struct Tree
{
char data;
int left;
int right;
} T1[15], T2[15];

int judge(int r1, int r2);
int CreatTree(Tree T[], int n);

int main()
{
int n;
int r1, r2;
while(cin >> n)
{
r1 = CreatTree(T1, n);
cin >> n;
r2 = CreatTree(T2, n);
if(judge(r1, r2)) cout << "Yes" << endl;
else cout << "No" << endl;
}
return 0;
}

int CreatTree(Tree T[], int n)
{
int  root = -1;
char r[10], l[10], data[10];
int check[15];
memset(check, 0, sizeof(check));
if(n)
{
for(int i = 0; i < n; i++)
{
scanf("%s %s %s", data, l, r);
T[i].data = data[0];
if(l[0] != '-')
{
T[i].left = l[0]-'0';
check[T[i].left] = 1;
}
else T[i].left = Null;
if(r[0] != '-')
{
T[i].right = r[0]-'0';
check[T[i].right] = 1;
}
else T[i].right = Null;
}
for(int  i  = 0; i < n; i++)
{
if(!check[i])
{
root = i;
break;
}
}
}
return root;
}

int judge(int r1, int r2)
{
if(r1 == Null && r2 == Null)
return 1;
if((r1 == Null && r2 != Null) || (r1 != Null  && r2 == Null))
return 0;
if(T1[r1].data != T2[r2].data)
return 0;
if((T1[r1].left == Null) && (T2[r2].left == Null))
return judge(T1[r1].right,T2[r2].right);
if((T1[r1].left != Null && T2[r2].left != Null) &&
(T1[T1[r1].left].data == T2[T2[r2].left].data))
return (judge(T1[r1].left, T2[r2].left) && judge(T1[r1].right, T2[r2].right));
else return (judge(T1[r1].left, T2[r2].right) && judge(T1[r1].right, T2[r2].left));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: