-
题目描述:
-
判断两序列是否为同一二叉搜索树序列
-
输入:
-
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
-
输出:
-
如果序列相同则输出YES,否则输出NO
-
样例输入:
-
2 567432 543267 576342 0
-
样例输出:
-
YES NO
- #include <iostream>
- #include <string>
- #include <algorithm>
- #include <memory.h>
- #include <cstdio>
- #include <cstdlib>
- #include <vector>
- #define MAX 1000000
- using namespace std;
- int a[MAX];
- int b[MAX];
- void insert(int *a, int i, int x){
- if(a[i]==-1){
- a[i] = x;
- return;
- }
- if(x>a[i])
- insert(a, 2*i+1, x);
- else
- insert(a, 2*i, x);
- }
- void clear(int* arr){
- for(int i=0;i<MAX;++i)
- arr[i] = -1;
- }
- int main(){
- //freopen("in.txt", "r", stdin);
- int n;
- string str;
- while(cin>>n, n){
- cin>>str;
- clear(a);
- for(int i=0;i<str.length();++i){
- insert(a, 1, str[i]);
- }
- for(int i=0;i<n;++i){
- clear(b);
- cin>>str;
- for(int j=0;j<str.length();++j)
- insert(b, 1, str[j]);
- bool flag = true;
- for(int k=0;k<MAX;++k){
- if(a[k]==-1 && b[k]!=-1 || a[k]!=-1 && b[k]==-1){
- flag = false;
- break;
- }
- }
- if(flag){
- printf("YES\n");
- }else
- printf("NO\n");
- }
- }
- //fclose(stdin);
- }