九度OnlineJudge题目1009:二叉搜索树

来源:互联网 发布:python spark例子 编辑:程序博客网 时间:2024/06/03 18:15

题目链接:http://ac.jobdu.com/problem.php?pid=1009

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

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

样例输入:
25674325432675763420
样例输出:
YESNO

AC代码:

#include<stdio.h>#include<string.h>struct Node{       Node* lchild;       Node* rchild;       int value;}tree[189];int loc;Node* Creat(){      tree[loc].lchild=tree[loc].rchild=NULL;      return &tree[loc++];}char str1[18],str2[18];int size1,size2;char *str;int *size;Node* CreatTree(int x,Node *p){      if(p==NULL)      {          p=Creat();          p->value=x;          return p;      }      if(x<p->value)      {          p->lchild=CreatTree(x,p->lchild);      }      if(x>p->value)      {          p->rchild=CreatTree(x,p->rchild);       }      return p; }void PreOrder(Node *p){     str[(*size)++]=p->value+'0';     if(p->lchild!=NULL)     {         PreOrder(p->lchild);                        }     if(p->rchild!=NULL)     {         PreOrder(p->rchild);      }     }void InOrder(Node *p){     if(p->lchild!=NULL)     {         PreOrder(p->lchild);                        }     str[(*size)++]=p->value+'0';     if(p->rchild!=NULL)     {         PreOrder(p->rchild);      }     }int main(){    char temp[10];    int n;    while(scanf("%d",&n)!=EOF&&n!=0)    {        loc=0;        scanf("%s",temp);        Node* root=NULL;        for(int i=0;temp[i]!=0;i++)        {                root=CreatTree(temp[i]-'0',root);        }        str=str1;        size1=0;        size=&size1;        PreOrder(root);        InOrder(root);        str1[size1]=0;        while(n-- >0)        {              root=NULL;              scanf("%s",temp);              for(int i=0;temp[i]!=0;i++)              {                root=CreatTree(temp[i]-'0',root);              }              str=str2;              size2=0;              size=&size2;              PreOrder(root);              InOrder(root);              str2[size2]=0;              if(strcmp(str1,str2)==0)              {                  printf("YES\n");              }              else              {                  printf("NO\n");              }            }    }}


 

 

0 0
原创粉丝点击