二叉排序树
2015-11-16 11:34
253 查看
二叉排序树
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 今天我们要判断两序列是否为同一二叉排序树输入
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉排序树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉排序树。(数据保证不会有空树)
输出
示例输入
2 123456789 987654321 432156789 0
示例输出
NO NO
提示
来源
示例程序
#include<stdio.h> #include<stdlib.h> #include<string.h> int j,l; char a1[50],b1[50]; struct node { char data; struct node *lchild,*rchild; }; struct node *creat(struct node *p,char x) { if(p==NULL) { p=(struct node *)malloc(sizeof(struct node)); p->lchild=NULL; p->rchild=NULL; p->data=x; } else { if(x<p->data) p->lchild=creat(p->lchild,x); else p->rchild=creat(p->rchild,x); } return p; } void qian1(struct node *p) { if(p!=NULL) { a1[l++]=p->data; qian1(p->lchild); qian1(p->rchild); } } void qian2(struct node *p) { if(p!=NULL) { b1[j++]=p->data; qian2(p->lchild); qian2(p->rchild); } } int main() { char a[50],b[50]; int i,n,m,k,t; struct node *p,*s; while(scanf("%d",&n)&&n) { l=0; p=NULL; scanf("%s",a); m=strlen(a); for(i=0;i<m;i++) p=creat(p,a[i]); qian1(p); a1[l]='\0'; while(n--) { j=0; s=NULL; scanf("%s",b); for(i=0;i<m;i++) s=creat(s,b[i]); qian2(s); b1[j]='\0'; if(strcmp(b1,a1)==0) printf("YES\n"); else printf("NO\n"); } } }
相关文章推荐
- Hive提交任务内存不足
- 工作中遇到的java 内存溢出,问题排查
- System.nanoTime与System.currentTimeMillis的区别
- 俄罗斯套娃
- QT出现 Cannot create children for a parent that is in a different thread 的解决方法:
- android 下拉菜单Spinner的具体用法
- 基于ECharts-JS图表库实现饼形图数据详细显示
- GitLab Flow的使用
- Android代码混淆之混淆规则
- Period
- iOS 定时器(NSTimer)的使用
- Android usb 部分Api
- 用户组,AD域控简介
- 在bash shell中使用getfattr查看文件扩展属性
- 开始我的博客生涯!!!!!
- Spring、XML配置AOP
- 【Oracle 基础】基本数据类型
- JQuery-Jcrop插件裁剪头像,及头像的上传
- 使用git、git-flow与gitlab工作 code review
- 学密码学一定得学程序