九度1009

来源:互联网 发布:淘宝818开学季 编辑:程序博客网 时间:2024/05/16 03:21
题目描述:
判断两序列是否为同一二叉搜索树序列
输入:
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
输出:

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

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

按照一般方法建树,然后先序遍历或者后序遍历比较,有种更好的方法就是利用数组静态存储,这样在比较的时候直接比较数组即可。

//1009#include<stdio.h>#include<string.h>int tree1[1024];int tree2[1024];char buf[11];void insert(int tree[],int x){int num=1;while(1){if(tree[num]==-1){tree[num]=x;break;}else if(tree[num]<x)num=num*2;elsenum=num*2+1;}}int main(){int n;while(scanf("%d",&n)!=EOF){if(n==0)break;scanf("%s",buf);memset(tree1,-1,sizeof(tree1));for(int i=0;buf[i]!='\0';i++)insert(tree1,buf[i]-'0');for(int i=0;i<n;i++){scanf("%s",buf);memset(tree2,-1,sizeof(tree2));for(int j=0;buf[j]!='\0';j++)insert(tree2,buf[j]-'0');int j;for(j=0;j<1024;j++)if(tree1[j]!=tree2[j])break;if(j==1024)printf("YES\n");elseprintf("NO\n");}}return 0;}



0 0