二叉排序树 SDUTOJ 2482
来源:互联网 发布:淘宝卖家怎么添加客服 编辑:程序博客网 时间:2024/06/09 15:11
二叉排序树
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 今天我们要判断两序列是否为同一二叉排序树
输入
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉排序树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉排序树。(数据保证不会有空树)
输出
示例输入
21234567899876543214321567890
示例输出
NONO
数据给的有点坑下边是一组正常的例子
- 样例输入:
25674325432675763420
- 样例输出:
YESNO
大体思路明明了求一棵树的任两序列是否相同。
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>using namespace std;struct node{ char d; struct node *l,*r;};char s[16],pre1[16],mid1[16],pre2[16],mid2[16];int ps1,ms1,ps2,ms2;void bu(char s,node *rt)//既然是二叉排序树必定是有序的故分情况{ if(rt->d>s) { if(rt->l) bu(s,rt->l); else { node *p; p=new node; p->l=p->r=NULL; p->d=s; rt->l=p; return ;//返回上节点 } } else { if(rt->r) bu(s,rt->r); else { node *p; p=new node ; p->l=p->r=NULL; p->d=s; rt->r=p; return ; } }}void pr1(node *rt){ if(rt) { pre1[ps1++]=rt->d; pr1(rt->l); pr1(rt->r); }}void mi1(node *rt){ if(rt) { mi1(rt->l); mid1[ms1++]=rt->d; mi1(rt->r); }}void pr2(node *st){ if(st) { pre2[ps2++]=st->d; pr2(st->l); pr2(st->r); }}void mi2(node *st){ if(st) { mi2(st->l); mid2[ms2++]=st->d; mi2(st->r); }}int main(){ int n,m,l1,l2,i; while(cin>>n&&n) { node *rt; ps1=ms1=0; cin>>s; l1=strlen(s); rt=new node ; for(i=0; i<l1; i++) { if(i==0)//建树 { rt->d=s[0]; rt->l=rt->r=NULL; } else bu(s[i],rt); } pr1(rt); mi1(rt); pre1[ps1]='\0'; mid1[ms1]='\0'; while(n--) { ps2=ms2=0; node *st; st=new node ; cin>>s; l2=strlen(s); for(i=0;i<l2;i++) { if(i==0) { st->d=s[0]; st->l=st->r=NULL; } else { bu(s[i],st); } } pr2(st);//分别获取两中序列 mi2(st);//并且都应该给字符串加结束符号,否则有可能夹杂着上一组数的序列 pre2[ps2]='\0'; mid2[ms2]='\0'; if(strcmp(pre1,pre2)==0 ) { if(strcmp(mid1,mid2)==0) { puts("YES"); } else puts("NO"); } else puts("NO"); } } return 0;}
0 0
- SDUTOJ 2482 二叉排序树
- SDUTOJ 2482 二叉排序树
- 二叉排序树 SDUTOJ 2482
- SDUTOJ 2128 ——二叉排序树
- sdutoj
- SDUTOJ
- SDUToj
- SDUToj
- SDUToj
- [2482]二叉排序树
- 2482二叉排序树
- 2482-二叉排序树
- 2482-二叉排序树
- SDUT 2482 二叉排序树
- SDUT 2482 二叉排序树
- SDUT 2482 二叉排序树
- SDUT 2482 二叉排序树
- SDUT 2482 二叉排序树
- stagefrightpalyer-----继承于MediaPlayerInterface
- 基于maven的openjpa简单例子
- VMware Vsphere高可用性(HA群集)
- MySQL 数据类型
- Plus One
- 二叉排序树 SDUTOJ 2482
- iOS开发的一些奇巧淫技
- iOS开发-优秀博客-实用技巧
- 获取JNIEnv的方法
- 用Xposed框架拦截Android操作系统的短信接收
- 【LruCache完全解析】Android高效加载大图、多图解决方案,有效避免程序OOM (AdapterView使用LruCache图片缓存)
- python发送请求两种代理设置方式
- NYOJ~懒省事的小明
- codevs1064