判断两序列是否为同一二叉搜索树序列
Input
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。Output
如果序列相同则输出YES,否则输出NO
Sample Input
2 567432 543267 576342 0Sample Output
YES NO分析:二叉搜索树是一个特殊的二叉树,所有节点的左孩子的值小于根节点的值,右孩子的的值大于根节点的值,根据给的序列生成一个二叉搜索树用数组存起来,由于二叉搜索树是唯一的,可以判断数组是否一样。
代码:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; char s1[25],s2[25]; int a[2010],b[2010]; void Btree(char s[],int c[]) //生成二叉搜索树 { for(int i=0;i<strlen(s);i++) { int k=s[i]-'0'; for(int j=1;j<=2000;) { if(c[j]==-1) { c[j]=k; break; } else if(c[j]>k) //左 j=j*2; else //右 j=j*2+1; } } } int main() { int n; while(~scanf("%d",&n)&&n) { scanf("%s",s1); memset(a,-1,sizeof(a)); Btree(s1,a); for(int i=0;i<n;i++) { int j; scanf("%s",s2); memset(b,-1,sizeof(b)); Btree(s2,b); for(j=1;j<2000;j++) if(a[j]!=b[j]) break; if(j==2000) printf("YES\n"); else printf("NO\n"); } } }
HDU - 3791 A - 二叉搜索树
最新推荐文章于 2019-09-13 22:03:18 发布