二叉搜索树(hdu3791)

二叉搜索树

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2280    Accepted Submission(s): 994

Problem Description
判断两序列是否为同一二叉搜索树序列
 
Input
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。 接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。 接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
 
Output
如果序列相同则输出YES,否则输出NO
 
Sample Input
2
567432
543267
576342
0
 
Sample Output
YES
NO
 
思路很简单,建树,然后输出比较一下就好了,
对像我这种刚刚入门的还是有难度啊,,,,,
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

typedef struct tree
{
    tree *right,*left;
    int num;
}tree;
tree *root;

int a[30],b[30],count=0;

tree *creat(int x)//建树
{
    tree *t=(tree *)malloc(sizeof(tree));
    t->right=NULL;
    t->left=NULL;
    t->num=x;
    return t;
}

tree *inster(tree *s,int x)//插入
{
    tree *t;
    if(s==NULL)
    {
        t=creat(x);
        s=t;
    }
    else
    {
        if(x<=s->num)
            s->left=inster(s->left,x);
        else
            s->right=inster(s->right,x);
    }
    return s;
}
void libian(tree *root)
{
    if(root!=NULL)
    {
        b[count++]=root->num;
        libian(root->left);
        libian(root->right);
    }
}
int main()
{
    int n;
    while(scanf("%d",&n)>0&&n)
    {
        count=0;
        root=NULL;
        char str[30];
        scanf("%s",str);
        int len=strlen(str);
        int i,j;
        for(i=0;i<len;i++)
        {
            int tmp=str[i]-48;
            root=inster(root,tmp);
        }
        libian(root);
        for(i=0;i<len;i++)
            a[i]=b[i];
        while(n--)
        {
            count=i=0;
            scanf("%s",str);
            root=NULL;
            for(i=0;i<len;i++)
            {
                int tmp=str[i]-48;
                root=inster(root,tmp);
            }
            libian(root);
            for(i=0;i<len;i++)
                if(a[i]!=b[i])
                {
                    printf("NO\n");
                    break;
                }
            if(i>=len)
                printf("YES\n");
        }
    }
    return 0;
}


前几天放假,玩了几天,接下来继续学。。。。努力!

posted @ 2013-08-27 21:53  寻找&星空の孩子  阅读(1251)  评论(0编辑  收藏  举报