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

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

2017-11-11 17:12 176 查看
#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->d
b547
ata == 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");
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: