二叉排序树
题目描述
二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 今天我们要判断两序列是否为同一二叉排序树
输入
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉排序树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉排序树。(数据保证不会有空树)
输出
示例输入
2 123456789 987654321 432156789 0
示例输出
NO NO
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 #include<string.h> 3 char a[10000],b[10000]; 4 void creat(char *x,char *y) 5 { 6 x[1]=y[0]; 7 int t=1; 8 for(int i=1;y[i];i++) 9 { 10 while(x[t]!='#') 11 { 12 if(y[i]>x[t]) 13 t=2*t+1; 14 else 15 t=2*t; 16 } 17 x[t]=y[i]; 18 t=1; 19 } 20 x[10000]='\0'; 21 } 22 int main() 23 { 24 int n; 25 char s[15]; 26 while(scanf("%d",&n)&&n) 27 { 28 scanf("%s",s); 29 memset(a,'#',sizeof(a)); 30 creat(a,s); 31 while(n--) 32 { 33 scanf("%s",s); 34 memset(b,'#',sizeof(b)); 35 creat(b,s); 36 if(!strcmp(a,b)) 37 puts("YES"); 38 else 39 puts("NO"); 40 } 41 } 42 return 0; 43 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步