PTA 数据结构与算法题目集(中文)5-3 树的同构 (25分)

来源:互联网 发布:linux下切换oracle命令 编辑:程序博客网 时间:2024/04/29 06:37
#include <stdio.h>
#include <string.h>
/*
题目以26个大写字母为结点值,可以建立一个26*2的二维数组 表示结点以及结点的左右结点
若只有一个结点,则判断两根是否相同
若有多节点,则先将前一棵树的结点的左右结点赋给对应的结点,
再判断后一棵树的左右结点值在对应的结点是否能找到 
*/
struct cow
{
char date,l,r;
}co[11];
int f1(int i)
{
if(co[i].l=='-')return 0;
return co[co[i].l-'0'].date;
}
int f2(int i)
{
if(co[i].r=='-')return 0;
return co[co[i].r-'0'].date;
}
void pt(char t[26][2],int n)
{
for(int i=0;i<n;i++)
{
int l=f1(i),r=f2(i);
if(l!=t[co[i].date-'A'][0]&&l!=t[co[i].date-'A'][1])
{
printf("No\n");
return;
}
if(r!=t[co[i].date-'A'][0]&&r!=t[co[i].date-'A'][1])
{
printf("No\n");
return;
}
}
printf("Yes\n");
}
int main()
{
char t[26][2];
memset(t,0,sizeof(t));
int n,m;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf(" %c %c %c",&co[i].date,&co[i].l,&co[i].r);
for(int i=0;i<n;i++)
{
if(co[i].l!='-')t[co[i].date-'A'][0]=co[co[i].l-'0'].date;
if(co[i].r!='-')t[co[i].date-'A'][1]=co[co[i].r-'0'].date;
}
char a;
if(n==1)a=co[0].date;
scanf("%d",&m);
for(int i=0;i<m;i++)
scanf(" %c %c %c",&co[i].date,&co[i].l,&co[i].r);
if(n!=m)printf("No\n");
else
{
if(m==1)
{
if(co[0].date!=a)printf("No\n");
else printf("Yes\n");
}
else
pt(t,n);
}
return 0;
}
0 0
原创粉丝点击