hdu3791 二叉搜索树

来源:互联网 发布:单片机控制220v继电器 编辑:程序博客网 时间:2024/05/20 21:19

判断两个序列能不能组成一样的二叉树,首先把树建起来,左结点比根小,右结点比根大

然后对它进行遍历,看能不能得到相同的结果

遍历分为前序中序后序就不多说啦

#include<stdio.h>#include<string.h>#include<stdlib.h>#define Null 0typedef struct Tree{    Tree *right,*left;    int value;}Tree;Tree *root;int count,cnt,a[12],b[12];Tree *create(int x){    Tree *t=(Tree*)malloc(sizeof(Tree));    t->left=0;    t->right=0;    t->value=x;    return t;}Tree *insert(Tree *s,int x){    Tree *t;    if(s==Null)    {        t=create(x);        s=t;    }    else    {        if(s->value>=x)s->left=insert(s->left,x);        else s->right=insert(s->right,x);    }    return s;}void serch(Tree *root){    if(root!=Null)    {        b[count++]=root->value;        serch(root->left);        serch(root->right);    }}int main(){    int n;    char str[12];    while(scanf("%d",&n)!=EOF)    {        root=Null;        count=0;        if(n==0)break;        scanf("%s",str);        int len=strlen(str);        for(int i=0;i<len;i++)        {            int tmp=str[i]-48;            root=insert(root,tmp);        }        serch(root);        memcpy(a,b,sizeof(b));        while(n--)        {            count=0;            scanf("%s",str);            root=Null;            for(int i=0;i<len;i++)            {                int tmp=str[i]-48;                printf("%d",str[i]);                root=insert(root,tmp);            }            serch(root);            cnt=0;            for(int i=0;i<len;i++)                if(a[i]!=b[i])                {                    printf("NO\n");                    break;                }                else cnt++;            if(cnt>=len)                printf("YES\n");        }    }}


0 0