简单的二叉树 hdu 3791

来源:互联网 发布:三星电话交换机编程 编辑:程序博客网 时间:2024/06/05 10:05
2011ACM/ICPC中国大陆赛区信息汇集~

二叉搜索树

TimeLimit: 2000/1000 MS(Java/Others)    MemoryLimit: 32768/32768 K (Java/Others)
Total Submission(s):237    AcceptedSubmission(s): 111


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

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

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

Sample Input
567432 
543267 
5763420
 

Sample Output
YES 
NO
#include <stdio.h> 
#include <string.h> 
int main()  
{  
 int i,j,t;  
 char s[22];  
 int tree[1111];  
 int tree1[1111];  
  while(scanf("%d",&t),t) 
  {  
   scanf("%s",s);  
   memset(tree,-1,sizeof(tree));  
   for(i=0;s[i]!='\0';i++) 
{  
     intc=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;s[i]!='\0';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&&tree[i]==tree1[i];i++); 
    if(i>1024) puts("YES");  
     else     puts("NO");  
    
  }  
}  
 

原创粉丝点击