二叉排序树
来源:互联网 发布:seo关键词优化外包 编辑:程序博客网 时间:2024/06/02 02:08
二叉排序树
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 今天我们要判断两序列是否为同一二叉排序树
输入
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉排序树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉排序树。(数据保证不会有空树)
输出
示例输入
21234567899876543214321567890
示例输出
NONO
提示
#include<iostream>#include<cstring>#include<queue>using namespace std;int flag;struct Tnode{ int d; Tnode *l,*r;};void CreatTree(Tnode *&p,int d) //注意要使用引用{ if(p==NULL) { p=new Tnode; p->d=d; p->l=NULL; p->r=NULL; } else //数小的放左边,大的放右边 { if(p->d>d) CreatTree(p->l,d); else CreatTree(p->r,d); }}void Cmp(Tnode *p,Tnode *q) //比较{ if(!p&&!q) { return; } else if(!p&&q||p&&!q) { flag=1; return; } else if(p->d==q->d) { Cmp(p->l,q->l); Cmp(p->r,q->r); } else { flag=1; return ; }}int main(){ int n; while(cin>>n&&n) { Tnode *Tree=NULL; char st[10]; cin>>st; int len=strlen(st); for(int i=0; i<len; i++) CreatTree(Tree,st[i]); char st1[10]; while(n--) { flag=0; Tnode *Tree1=NULL; cin>>st1; for(int i=0; st1[i]!='\0'; i++) CreatTree(Tree1,st1[i]); Cmp(Tree,Tree1); if(flag) cout<<"NO\n"; else cout<<"YES\n"; } } return 0;}
0 0
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- hdu 2243 考研路茫茫——单词情结(AC自动机+矩阵)
- 快速排序
- IOS NSTimerr
- HTML5与JQuery混合应用:选座功能简单实现
- linux中把没有执行权限的文件变为可执行
- 二叉排序树
- 坑爹的青云志(第一集)
- drools 6学习4--动态加载规则
- Servlet-表单数据
- 东王河姜总来公司考察
- Android webView 软键盘覆盖输入框,webView页面底部显示不全
- select,epoll,poll比较(网络资源总结)
- leetcode 22. Generate Parentheses 递归
- adb出现cannot parse version string:kg01的解决方法