HDOJ-3791(二叉搜索树)
2015-11-20 21:51
405 查看
二叉搜索树
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3680 Accepted Submission(s): 1610
Problem Description
判断两序列是否为同一二叉搜索树序列
Input
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
Output
如果序列相同则输出YES,否则输出NO
Sample Input
2 567432 543267 576342 0
Sample Output
YES NO
Source
浙大计算机研究生复试上机考试-2010年
1.先介绍一下搜索树
二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树:
若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int ans1[10000]; int ans2[10000]; typedef struct node { int key; node *l,*r; }bstnode; char map[100000]; char map1[100000]; int xx[10000]; int bstinsert(bstnode *&p,int k) { if(p==NULL) { p=new bstnode(); p->key=k; p->l=p->r=NULL; return 1; } else if(k==p->key) { return 0; } else if(k<p->key) { return bstinsert(p->l,k); } else { return bstinsert(p->r,k); } } void build(bstnode *&bt,int *str,int n) { bt=NULL; for(int i=0;i<n;i++) { bstinsert(bt,str[i]); } } int er; int er2; void preorder(bstnode *bt) { if(bt!=NULL) { ans1[er++]=bt->key; preorder(bt->l); preorder(bt->r); } } void preorder1(bstnode *bt) { if(bt!=NULL) { ans2[er2++]=bt->key; preorder1(bt->l); preorder1(bt->r); } } int main() { int n; while(scanf("%d",&n)&&n) { er=0; scanf("%s",map); int ll=strlen(map); for(int i=0;i<ll;i++) { xx[i]=map[i]-48; } bstnode *nd=new bstnode(); build(nd,xx,ll); preorder(nd); while(n--) { er2=0; scanf("%s",map1); int len=strlen(map1); int i,j; for(i=0;i<len;i++) { xx[i]=map1[i]-48; } bstnode *nn=new bstnode(); build(nn,xx,len); preorder1(nn); int cnm=0; for(i=0;i<len;i++) { if(ans1[i]!=ans2[i]) { cnm=1; break; } } if(cnm==1) { printf("NO\n"); } else { printf("YES\n"); } } } return 0; }
相关文章推荐
- 天声人語 20151120 また共謀罪なのか
- linux根文件系统/etc/group文件详解
- 南大软院二十一天成神计划
- Java访问修饰符总结
- 索引
- modal
- 一步一步制作yaffs/yaffs2根文件系统(五)---生成yaffs/yaffs2镜像文件及下载到开发板
- 河狸家:Redis 源码的深度剖析
- 创建多线程的第二种方法
- 1007. 素数对猜想 (20)
- JS实现一个简单的网页钟表
- 一步一步制作yaffs/yaffs2根文件系统(四)---构建etc、dev等剩余目录
- 网络协议
- 信息安全系统设计基础实验一:Linux开发环境的配置和使用
- ASP.NET-MVC4-06-ViewData-ViewBag
- 一步一步制作yaffs/yaffs2根文件系统(三)---使用glibc库构造 /lib
- HBase基本数据操作详解【完整版,绝对精品】
- HackTheGame
- Myeclipse下tomcat报错publishing to tomcat.......
- ubuntu下zabbix服务器监控工具部署