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

来源:互联网 发布:淘宝白菜价群赚钱吗 编辑:程序博客网 时间:2024/06/02 06:03
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
typedef struct BiTNode
{
    char data;
    struct BiTNode *lchild, *rchild;
}*Bitree;
struct node
{
    char ch;
    int l, r;
}a[20];
Bitree Initbitree(Bitree &T, int i)
{
    T = new BiTNode;
    T->lchild = NULL;
    T->rchild = NULL;
    T->data = a[i].ch;
    if(a[i].l!=-1) Initbitree(T->lchild, a[i].l);
    if(a[i].r!=-1) Initbitree(T->rchild, a[i].r);


    return T;
}
Bitree creat(int n)
{
    int i, j;
    int b[20] = {0};
    char s1[20], s2[20], s3[20];
    for(i = 0;i<n;i++)
    {
        scanf("%s %s %s", s1, s2, s3);
        a[i].ch = s1[0];
        if(s2[0]!='-')
        {
            a[i].l = s2[0] - '0';
            b[a[i].l] = 1;
        }
        else a[i].l = -1;


        if(s3[0]!='-')
        {
            a[i].r = s3[0] - '0';
            b[a[i].r] = 1;
        }
        else a[i].r = -1;
    }


    for(j = 0;j<n;j++)
    {
        if(!b[j]) break;
    } 
    Bitree T = Initbitree(T, j);
    return T;
}
int check(Bitree &T1, Bitree &T2)
{
    if(!T1&&!T2) return 1;
    if(T1&&T2)
    {
        if(T1->data == T2->data)
        {
            if((check(T1->lchild, T2->lchild)&&check(T1->rchild, T2->rchild))||(check(T1->lchild, T2->rchild)&&check(T1->rchild, T2->lchild)))
            {
                return 1;
            }
        }
    }
    return 0;
}
int main()
{
    int n, m;
    Bitree T1, T2;
    while(~scanf("%d", &n))
    {
        T1 = creat(n);
        scanf("%d", &m);
        T2 = creat(m);
        if(check(T1, T2)) printf("Yes\n");
        else printf("No\n");
    }
}
原创粉丝点击