二叉排序树
2015-07-27 18:56
309 查看
二叉排序树
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<bits/stdc++.h> using namespace std; int j; typedef struct node { char a; node *l,*r; }*tree; tree creat(tree t,char k) { if (t==NULL) { t=new node; t->l=NULL; t->r=NULL; t->a=k; } else { if (t->a>k) t->l=creat(t->l,k); else t->r=creat(t->r,k); } return t; } void xianxu(tree t,char *q) { if (t) { q[j++]=t->a; xianxu(t->l,q); xianxu(t->r,q); } } int main() { int n,i; char q1[100],q2[100],q[100]; while (cin>>n,n!=0) { memset(q1,0,sizeof(q1)); cin>>q; tree t=NULL; for (i=0;i<strlen(q);i++) { t=creat(t,q[i]); } j=0; xianxu(t,q1); while (n--) { memset(q2,0,sizeof(q2)); cin>>q; tree t1=NULL; for (i=0;i<strlen(q);i++) { t1=creat(t1,q[i]); } j=0; xianxu(t1,q2); if (strcmp(q1,q2)==0) cout<<"YES\n"; else cout<<"NO\n"; } } return 0; }
相关文章推荐
- HDU 2491
- Mongodb中在已有Colloection插入/更新相关域值
- ocrstyle
- [MapReduce]Top N 任务的mapper
- HDU-2058 The sum problem
- HDU 5247 找连续数 (set妙用)
- 字符串倒序输出-多种方法
- 整数变字符串 字符串变整数
- 赛前必须看的细节
- POJ题目细究
- hdu 2492 树状数组 Ping pong
- 给eclipse配置sublime主题的背景
- shell常用的 if语句【-x file】
- Linux系统下安装rz/sz命令及使用说明
- POJ 1068 Parencodings(模拟)
- 使用LabVIEWPC的制备
- 折半代码处理。短信发送。
- Alternating Least Squares(ASL) for Implicit Feedback Datasets的数学推导以及用Python实现
- 课堂笔记04
- Linux的磁盘管理