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

题目描述

对应给定的一个序列可以唯一确定一棵二叉排序树。然而,一棵给定的二叉排序树却可以由多种不同的序列得到。例如分别按照序列{3,1,4}和{3,4,1}插入初始为空的二叉排序树,都得到一样的结果。你的任务书对于输入的各种序列,判断它们是否能生成一样的二叉排序树。

输入

输入包含若干组测试数据。每组数据的第1行给出两个正整数N (n < = 10)和L,分别是输入序列的元素个数和需要比较的序列个数。第2行给出N个以空格分隔的正整数,作为初始插入序列生成一颗二叉排序树。随后L行,每行给出N个元素,属于L个需要检查的序列。
简单起见,我们保证每个插入序列都是1到N的一个排列。当读到N为0时,标志输入结束,这组数据不要处理。

输出

对每一组需要检查的序列,如果其生成的二叉排序树跟初始序列生成的二叉排序树一样,则输出"Yes",否则输出"No"。

示例输入

4 2
3 1 4 2
3 4 1 2
3 2 4 1
2 1
2 1
1 2
0

示例输出

Yes
No

No

#include <stdio.h> #include<stdlib.h> #include<string.h> using namespace std; typedef int status; typedef struct BNode { int data; BNode *lchild,*rchild; }*BiTree; status Search(BiTree &T,int key,BiTree f,BiTree &p)//二叉排序树的查找; //p指向数据元素的结点,f指向双亲的结点; { if(!T) { p=f;//树为空,则数据元素指向双亲结点, return 0; } else if(key==T->data) { p=T; return 1; } else if(key<T->data) return Search(T->lchild,key,T,p);//查找树的左子树 else return Search(T->rchild,key,T,p);//查找树的右字树; } status Insert(BiTree &T,int key)//二叉排序树元素的插入; { BiTree p,s; if(!Search(T,key,NULL,p)) { s=new BNode; s->data=key;//插入的结点一定是树的叶子结点; s->lchild=s->rchild=NULL; if(!p) T=s;//第一个结点(根结点); else if(key<p->data) T/p->lchild=s; else T/p->rchild=s; return 1; } return 0; } int judge(BiTree &T,BiTree &T1)//判断是否为同一颗二叉排序树; { if(!T&&!T1) return 1; if(T&&T1) if(T->data==T1->data) if(judge(T->lchild,T1->lchild)&&judge(T->rchild,T1->rchild)) return 1; return 0; } int main() { int n,num; BiTree T,T1; while(~scanf("%d",&n)&&n) { int m; scanf("%d",&m); T=NULL;//对树初始化处理; for(int i=0;i<n;i++) { scanf("%d",&num); Insert(T,num);//二叉排序树的元素插入; } while(m--) { int flag=0; T1=NULL;//对树初始化处理; for(int i=0;i<n;i++) { scanf("%d",&num); Insert(T1,num); } flag=judge(T,T1); if(flag) printf("Yes\n"); else printf("No\n"); } } return 0; }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509500.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GCC常用参数详解

简介 gcc and g现在是gnu中最主要和最流行的c & c编译器 .gcc/g在执行编译工作的时候&#xff0c;总共需要以下几步: 1.预处理,生成.i的文件[预处理器cpp] 2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs] 3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器a…

使用反射调用构造器创建对象

构造器最大的作用:创建对象. 为什么使用反射创建对象,为什么不直接来new呢? 在框架中,提供给我们的都是字符串. ----------------------------------------------------------- 使用反射创建对象: 步骤: 1);找到构造器所在类的字节码对象. 2):获取构造器对象. 3):使用反射…

数据结构实验之查找三:树的种类统计

题目描述 随着卫星成像技术的应用&#xff0c;自然资源研究机构可以识别每一个棵树的种类。请编写程序帮助研究人员统计每种树的数量&#xff0c;计算每种树占总数的百分比。 输入 输入一组测试数据。数据的第1行给出一个正整数N (n < 100000)&#xff0c;N表示树的数量&…

java中如何使用反射调用方法以及获得类中的属性

使用反射获取类中的方法: 1):获取方法所在类的字节码对象. 2):获取方法. ------------------------------------------------------------------------ Class类中常用方法: publicMethod[] getMethods():获取包括自身和继承过来的所有的public方法 publicMethod[] getDeclaredM…

Maxwell读取MySQL数据

文章目录Maxwell 概述1.1 Maxwell 定义1.2 Maxwell工作原理1.2.1 MySQL主从复制过程1.2.2 Maxwell的工作原理1.2.3 **MySQL** **的** binlog1.3 Maxwell和Canal的对比Maxwell使用2.1 Maxwell安装2.1.1 安装地址2.1.2 安装部署2.1.3 MySQL环境准备2.1.4 初始化Maxwell元数据库2.…

数据结构实验之查找二:平衡二叉树

题目描述 根据给定的输入序列建立一棵平衡二叉树&#xff0c;求出建立的平衡二叉树的树根。 输入 输入一组测试数据。数据的第1行给出一个正整数N(n < 20)&#xff0c;N表示输入序列的元素个数&#xff1b;第2行给出N个正整数&#xff0c;按数据给定顺序建立平衡二叉树。 输…

Linux-(C/C++)动态链接库生成以及使用(libxxx.so)

Linux中so文件为共享库&#xff0c;与windows下dll类似&#xff0c;不过实现要简单。 so可以供多个进程使用&#xff0c;不同进程调用同一个so文件&#xff0c;所使用so文件不同。 so文件源程序不需要main函数&#xff0c;有也不会被执行。 下面通过一个简单例子&#xff0c;来…

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

题目描述 给定一个无向连通图&#xff0c;顶点编号从0到n-1&#xff0c;用广度优先搜索(BFS)遍历&#xff0c;输出从某个顶点出发的遍历序列。(同一个结点的同层邻接点&#xff0c;节点编号小的优先遍历&#xff09;输入 输入第一行为整数n&#xff08;0< n <100&#xf…

IO对象流(序列化和反序列化)

序列化和反序列化概念&#xff1a; 序列化: 把堆内存中的java对象数据&#xff0c;通过某种方式把对象存储到磁盘文件中或者传递给其他网络的节点&#xff08;在网络上传输&#xff09; 反序列化: 把磁盘文件中的对象数据或者网络节点上的对象数据&#xff0c;恢复成java对象的…

我是怎么招聘程序员的

http://coolshell.cn/articles/1870.html

数据结构实验之图论二:基于邻接表的广度优先搜索遍历

题目描述 给定一个无向连通图&#xff0c;顶点编号从0到n-1&#xff0c;用广度优先搜索(BFS)遍历&#xff0c;输出从某个顶点出发的遍历序列。(同一个结点的同层邻接点&#xff0c;节点编号小的优先遍历&#xff09;输入 输入第一行为整数n&#xff08;0< n <100&#xf…

IO之打印流

打印流,打印数据的,打印流只能是输出流: PrintStream: 字节打印流 PrintWriter: 字符打印流 -对于PrintWriter来说,当启用字段刷新之后, 调用println或者printf或者format方法,便会立马刷新操作. 如果没有开启自动刷新,则需要手动刷新或者当缓冲区满的时候,再自动刷新. 使…

数据结构实验之查找四:二分查找

题目描述 在一个给定的无重复元素的递增序列里&#xff0c;查找与给定关键字相同的元素&#xff0c;若存在则输出找到的位置,不存在输出-1。 输入 一组输入数据&#xff0c;输入数据第一行首先输入两个正整数n ( n < 10^6 )和m ( m < 10^4 )&#xff0c;n是数组中数据元…

橡皮鸭程序调试法

转自&#xff1a;http://write.blog.csdn.net/postedit 面&#xff0c;让我来为你介绍一个程序调试大法——“橡皮鸭程序调试法”&#xff0c;这个方法在调试界是很出众的&#xff0c;实施起来相当方便和简易&#xff0c;几乎可以随时随地地实验&#xff0c;几乎不需要借助任何…

标准IO概述和操作

标准的IO: 标准的输入: 通过键盘录入数据给程序. 标准的输出: 在屏幕上显示程序数据. 在System类中有两个常量: InputStream in System.in; PrintStream out System.out; 标准流的重定向操作: 标准的输入: 通过键盘录入数据给程序. 重新指定输入的源不再是键盘,而是一个…

十条不错的编程观点

转自&#xff1a;http://coolshell.cn/articles/2424.html 在Stack Overflow上有这样的一个贴子《What’s your most controversial programming opinion?》&#xff0c;翻译成中文就是“你认为最有争议的编程观点是什么&#xff1f;”&#xff0c;不过&#xff0c;在400多个主…

数据结构上机实验之二分查找

题目描述 在一个递增的序列里&#xff0c;查找元素是否存在&#xff0c;若存在输出YES,不存在输出NO.输入 本题多组数据&#xff0c;首先输入一个数字n(n>100000)&#xff0c;然后输入n个数&#xff0c;数据保证数列递增&#xff0c;然后再输入一个查找数字。输出 若存在输出…

IO之 Properties类加载文件

配置文件:资源文件(以.properties作为拓展名的文件)/属性文件: 做项目开发,为何使用配置文件? 把所有的数据存储在代码中,写死了,”硬编码”. 比如:在Java中需要连接数据库,必须拥有数据的账号和密码. 此时我们就得在Java代码中编写,类似的代码: String username”root”…

Makefile系列学习(博客)

http://blog.csdn.net/haoel/article/category/9198/3

数据结构实验之查找六:顺序查找

题目描述 在一个给定的无序序列里&#xff0c;查找与给定关键字相同的元素&#xff0c;若存在则输出找到的元素在序列中的位序和需要进行的比较次数,不存在则输出"No"&#xff0c;序列位序从1到n,要求查找从最后一个元素开始,序列中无重复元素。 输入 连续多组数据输…