二叉排序树
来源:互联网 发布:cda数据分析师怎么样 编辑:程序博客网 时间:2024/06/05 19:41
二叉排序树
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 今天我们要判断两序列是否为同一二叉排序树
输入
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉排序树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉排序树。(数据保证不会有空树)
输出
示例输入
21234567899876543214321567890
示例输出
NONO
#include<bits/stdc++.h>using namespace std;struct Tree{ Tree *left; Tree *right; char data;};void creatTree(Tree *&root,int number){ if(root==NULL) { root=new Tree(); root->data=number; root->left=root->right=NULL; } else { if(number>root->data) creatTree(root->right,number); else creatTree(root->left,number); }}int judge(Tree *root1,Tree *root2){ if(root1&&root2) { if(root1->data==root2->data)return judge(root1->left,root2->left)&&judge(root1->right,root2->right); else return 0; } else if(root1==NULL&&root2==NULL)return 1; else return 0;}int main(){ int n; char a[10]; char b[10]; int len1; int len2; while(~scanf("%d",&n)) { if(n==0)break; else { Tree *root1=NULL; scanf("%s",a); len1=strlen(a); for(int i=0;i<len1;i++) creatTree(root1,a[i]-'0'); while(n--) { Tree *root2=NULL; scanf("%s",b); len2=strlen(b); for(int i=0;i<len2;i++) creatTree(root2,b[i]-'0'); if(judge(root1,root2))printf("YES\n"); else printf("NO\n"); } } }}
0 0
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 二叉排序树
- 华为OJ 挑7
- Model-View-ViewModel for iOS
- 我的Android开发之旅(二)Android布局管理
- 对bean生命周期的认识
- Kylin学习入门
- 二叉排序树
- E
- Starting namenodes on [master] hadoop@master's password:
- ALSA audio 术语
- HDU_2955_Robberies(变种的01背包)
- 简单的外边距折叠问题
- 支持向量机(SVM)二
- LCA--最近公共祖先
- Spark基础知识