HDU3791-二叉搜索树

来源:互联网 发布:淘宝手机详情页装修 编辑:程序博客网 时间:2024/05/21 00:21

二叉搜索树

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 86   Accepted Submission(s) : 46

Font: Times New Roman | Verdana | Georgia

Font Size:  

Problem Description

判断两序列是否为同一二叉搜索树序列

Input

开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。

Output

如果序列相同则输出YES,否则输出NO

Sample Input

25674325432675763420

Sample Output

YESNO

#include <iostream>#include <string.h>#include <stdio.h>using namespace std;int main(){    int i,j,t;    char s[22];    int tree[1111];    int tree1[1111];    while(scanf("%d",&t))    {        if(t==0) break;        scanf("%s",s);        memset(tree,-1,sizeof(tree));        for(i=0; i<strlen(s); i++)        {            int c=s[i]-'0';            j=1;            while(tree[j]!=-1)            {                if(c<=tree[j]) j=j*2;                else j=j*2+1;            }            tree[j]=c;        }        while(t--)        {            scanf("%s",s);            memset(tree1,-1,sizeof(tree1));            for(i=0; i<strlen(s); i++)            {                int c=s[i]-'0';                j=1;                while(tree1[j]!=-1)                {                    if(c<=tree1[j]) j=j*2;                    else j=j*2+1;                }                tree1[j]=c;            }            for(i=1;i<=1024;i++)                if(tree1[i]!=tree[i]) break;            if(i>1024) printf("YES\n");            else printf("NO\n");        }    }}

0 0
原创粉丝点击