数据结构实验之查找一:二叉排序树

数据结构实验之查找一:二叉排序树

Time Limit: 400MS Memory Limit: 65536KB

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

Code realization

#include <iostream>
using namespace std;
struct node
{
	int data;
	struct node *left,*right;
};
void creat(node *&root,int num)
{
	if(root == NULL)
	{
		root = new node;
		root->data = num;
		root->left = NULL;
		root->right = NULL;
	}
	else
	{
		if(num > root->data)
			creat(root->right,num);
		else
			creat(root->left,num);
	}
}
int compare(node *&root1,node *&root2)
{
	if(root1==NULL && root2==NULL)
		return 1;
	else if(root1->data == root2->data)
		return compare(root1->left,root2->left)&&compare(root1->right,root2->right);
	else
		return 0;
}
int main()
{

	int n,l;
	while(cin>>n)
	{
		node *root1,*root2;
		if(n==0)
			break;
		else
		{
			root1 = NULL;
			cin>>l;
			int i;
			for(i=0;i<n;i++)
			{
				int a;
				cin>>a;
				creat(root1,a);
			}
			while(l--)
			{
				root2=NULL;
				for(i=0;i<n;i++)
				{
					int a;
					cin>>a ;
					creat(root2,a);
				}
				if(compare(root1,root2))
					cout<<"Yes"<<endl;
				else
					cout<<"No"<<endl;
			}
		}

	}
	return 0;
}
时间: 2024-12-09 22:11:24

数据结构实验之查找一:二叉排序树的相关文章

数据结构教程 第三十五课 实验七 查找

教学目的: 练习顺序查找.折半查找及二叉排序树的实现 教学重点: 教学难点: 授课内容: 顺序查找 折半查找 顺序查找及折半查找示例 #include <stdio.h> typedef int KeyType; typedef struct{ KeyType key; int maths; int english; }ElemType; #define EQ(a,b) ((a)==(b)) #define LT(a,b) ((a)< (b)) #define LQ(a,b) ((a)&

数据结构实践项目——查找(一)

本文是[数据结构基础系列(8):查找]课程的第一组实践项目. 本文针对: 0801 查找问题导学 0802 线性表的顺序查找 0803 线性表的折半查找 0804 索引存储结构 0805 分块查找 0806 二叉排序树 0807 二叉排序树(续) 0808 平衡二叉树 纸上谈兵:"知原理"检验题目 [参考(部分)] [参考(1)] 1.对于A[0..10]有序表{12,18,24,35,47,50,62,83,90,115,134} (1)用二分查找法查找 90时,需进行多少次查找可确

数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历

数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索(BFS)遍历,输出从某个顶点出发的遍历序列.(同一个结点的同层邻接点,节点编号小的优先遍历) Input 输入第一行为整数n(0< n <100),表示数据的组数. 对于每组数据,第一行是三个整数k,m,t(0<k<100,0<m<(k-1)

数据结构实验之链表六:有序链表的建立

数据结构实验之链表六:有序链表的建立 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 输入N个无序的整数,建立一个有序链表,链表中的结点按照数值非降序排列,输出该有序链表. Input 第一行输入整数个数N: 第二行输入N个无序的整数. Output 依次输出有序链表的结点值. Example Input 6 33 6 22 9 44 5 Example Output 5 6 9 22 33 44 Code realiza

数据结构实验之链表一:顺序建立链表(构造函数)

数据结构实验之链表一:顺序建立链表 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 输入N个整数,按照输入的顺序建立单链表存储,并遍历所建立的单链表,输出这些数据. Input 第一行输入整数的个数N: 第二行依次输入每个整数. Output 输出这组整数. Example Input 8 12 56 4 6 55 15 33 62 Example Output 12 56 4 6 55 15 33 62 Code rea

数据结构实验之链表二:逆序建立链表

数据结构实验之链表二:逆序建立链表 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 输入整数个数N,再输入N个整数,按照这些整数输入的相反顺序建立单链表,并依次遍历输出单链表的数据. Input 第一行输入整数N;: 第二行依次输入N个整数,逆序建立单链表. Output 依次输出单链表所存放的数据. Example Input 10 11 3 5 27 9 12 43 16 84 22 Example Output 22

数据结构实验之链表一:顺序建立链表

数据结构实验之链表一:顺序建立链表 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 输入N个整数,按照输入的顺序建立单链表存储,并遍历所建立的单链表,输出这些数据. Input 第一行输入整数的个数N: 第二行依次输入每个整数. Output 输出这组整数. Example Input 8 12 56 4 6 55 15 33 62 Example Output 12 56 4 6 55 15 33 62 Code rea

数据结构实验之链表七:单链表中重复元素的删除

数据结构实验之链表七:单链表中重复元素的删除 Time Limit: 1000MS Memory Limit: 65536KB Problem Description 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个). Input 第一行输入元素个数n:  第二行输入n个整数. Output 第一行输出初始链表元素个数:  第二行输出按照逆位序所建立的初始链表: 第三行输出删除重复元素后的单链表元素个数: 第四行输出删除重复元素后的单

数据结构实验:连通分量个数

数据结构实验:连通分量个数 Time Limit: 1000MS Memory Limit: 65536KB Problem Description  在无向图中,如果从顶点vi到顶点vj有路径,则称vi和vj连通.如果图中任意两个顶点之间都连通,则称该图为连通图, 否则,称该图为非连通图,则其中的极大连通子图称为连通分量,这里所谓的极大是指子图中包含的顶点个数极大. 例如:一个无向图有5个顶点,1-3-5是连通的,2是连通的,4是连通的,则这个无向图有3个连通分量.   Input  第一行是