数据结构实验之查找一:二叉排序树
2016-12-01 14:44
369 查看
#include<iostream> using namespace std; typedef struct node { int data; struct node *l,*r; }st; int i,n,m; void Push(st *root) { int j,k; cin>>root->data; root->l=NULL; root->r=NULL; for(j=1;j<n;j++) { cin>>k; st *q=root; while(1) { if(q->data>k) { if(q->l) q=q->l; else { st *p=new st; p->data=k; p->l=NULL; p->r=NULL; q->l=p; break; } } else { if(q->r) q=q->r; else { st *p=new st; p->data=k; p->l=NULL; p->r=NULL; q->r=p; break; } } } } } int deal(st *root,st *root1) { if(!root&&!root1) return 1; else if((root&&root1)&&(root->data==root1->data)&&deal(root->l,root1->l)&&deal(root->r,root1->r)) return 1; else return 0; } int main() { while(cin>>n&&n!=0) { cin>>m; st *root=new st; Push(root); for(i=0;i<m;i++) { st *root1=new st; Push(root1); int f=deal(root,root1); if(f) cout<<"Yes\n"; else cout<<"No\n"; } } return 0; }
Time Limit: 400MS Memory Limit: 65536KB
Submit Statistic
Problem Description
对应给定的一个序列可以唯一确定一棵二叉排序树。然而,一棵给定的二叉排序树却可以由多种不同的序列得到。例如分别按照序列{3,1,4}和{3,4,1}插入初始为空的二叉排序树,都得到一样的结果。你的任务书对于输入的各种序列,判断它们是否能生成一样的二叉排序树。
Input
输入包含若干组测试数据。每组数据的第1行给出两个正整数N (n < = 10)和L,分别是输入序列的元素个数和需要比较的序列个数。第2行给出N个以空格分隔的正整数,作为初始插入序列生成一颗二叉排序树。随后L行,每行给出N个元素,属于L个需要检查的序列。简单起见,我们保证每个插入序列都是1到N的一个排列。当读到N为0时,标志输入结束,这组数据不要处理。
Output
对每一组需要检查的序列,如果其生成的二叉排序树跟初始序列生成的二叉排序树一样,则输出"Yes",否则输出"No"。
Example Input
4 2 3 1 4 2 3 4 1 2 3 2 4 1 2 1 2 1 1 2 0
Example Output
Yes No No
相关文章推荐
- SDUTACM 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找三:树的种类统计(二叉排序树)
- SDUT 3373 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树【OJ--3373】
- 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树
- SDUT(3373)数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树
- <sdut-3373>数据结构实验之查找一:二叉排序树
- (模板题)sdut 3373 数据结构实验之查找一:二叉排序树(二叉排序树的建立)
- SDUT 3373 数据结构实验之查找一:二叉排序树
- SDUT oj 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树
- 数据结构实验之查找一:二叉排序树