数据结构实验之查找一:二叉排序树 (SDUT 3373)
二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),也称二叉搜索树。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct node{
int data;
struct node *l, *r;
};
struct node *creat(struct node *root,int x)
{
if(root == NULL) // 如果 root 是空,表示当前是可以把这个点加进去的,就可以放进去了
{
root = new node;
root -> data = x;
root -> l = NULL;
root -> r = NULL;
}
else { //如果不是,考虑两种情况
if(x > root -> data) //如果比当前的根节点大,去右子树找
root -> r = creat(root -> r, x);
else
root -> l = creat(root -> l, x); // 否则去左子树找
}
return root; //别忘记了返回树根!
};
int ok(struct node *t1, struct node *t2) // 判断两个树是否相同
{
if(t1 == NULL && t2 == NULL) // 如果比较到最下层都没有发现不同的就返回 1
return 1;
else if(t1 != NULL && t2 != NULL) // 如果没有到最下层,继续向下找
{
if(t1 -> data != t2 -> data) // 如果一旦发现不同的,就不满足了
{
return 0;
}
else if((ok( t1 -> l , t2 -> l) && ok(t1 -> r, t2 -> r))){ // 分别的左子树、右子树都要满足
return 1;
}
}
else return 0;
}
int a[55];
int b[55];
int main()
{
int n,m;
while(scanf("%d",&n)!=EOF && n)
{
scanf("%d",&m);
struct node *root1,*root2; // 这里需要树根节点(指针)
for(int i = 0; i < n; i ++) { // 先输入
scanf("%d",&a[i]);
}
root1 = new node;
root1 -> data = a[0]; // 把根放进去
root1 -> l = root1 -> r = NULL; // 左右结点初始化
for(int i = 1; i < n; i ++){ // 建树
root1 = creat(root1,a[i]);
}
while(m --)
{
for(int i = 0; i < n; i ++){ // 相同的建树方法
scanf("%d",&b[i]);
}
root2 = new node;
root2 -> data = b[0];
root2 -> l = root2 -> r = NULL;
for(int i = 1; i < n; i ++)
{
root2 = creat(root2,b[i]);
}
int f = ok(root1,root2); // 比较
if(f)printf("Yes\n");
else printf("No\n");
}
}
return 0;
}
改了一下建树的时候的不必要的步骤。(感谢wjh小哥哥)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct node{
int data;
struct node *l, *r;
};
struct node *creat(struct node *root,int x)
{
if(root == NULL)
{
root = new node;
root -> data = x;
root -> l = NULL;
root -> r = NULL;
}
else {
if(x > root -> data)
root -> r = creat(root -> r, x);
else
root -> l = creat(root -> l, x);
}
return root;
};
int ok(struct node *t1, struct node *t2)
{
if(t1 == NULL && t2 == NULL)
return 1;
else if(t1 != NULL && t2 != NULL)
{
if(t1 -> data != t2 -> data)
{
return 0;
}
else if((ok( t1 -> l , t2 -> l) && ok(t1 -> r, t2 -> r))){
return 1;
}
}
else return 0;
}
int a[55];
int b[55];
int main()
{
int n,m;
while(scanf("%d",&n)!=EOF && n)
{
scanf("%d",&m);
struct node *root1,*root2;
for(int i = 0; i < n; i ++) {
scanf("%d",&a[i]);
}
root1 = NULL;
for(int i = 0; i < n; i ++){
root1 = creat(root1,a[i]);
}
while(m --)
{
for(int i = 0; i < n; i ++){
scanf("%d",&b[i]);
}
root2 = NULL;
for(int i = 0; i < n; i ++)
{
root2 = creat(root2,b[i]);
}
int f = ok(root1,root2);
if(f)printf("Yes\n");
else printf("No\n");
}
}
return 0;
}
数据结构实验之查找一:二叉排序树 (SDUT 3373)的更多相关文章
- SDUT 3373 数据结构实验之查找一:二叉排序树
数据结构实验之查找一:二叉排序树 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 对应给定的一 ...
- SDUT 3375 数据结构实验之查找三:树的种类统计
数据结构实验之查找三:树的种类统计 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 随着卫星成 ...
- SDUT-3373_数据结构实验之查找一:二叉排序树
数据结构实验之查找一:二叉排序树 Time Limit: 400 ms Memory Limit: 65536 KiB Problem Description 对应给定的一个序列可以唯一确定一棵二叉排 ...
- SDUT 3379 数据结构实验之查找七:线性之哈希表
数据结构实验之查找七:线性之哈希表 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 根据给定 ...
- SDUT 3377 数据结构实验之查找五:平方之哈希表
数据结构实验之查找五:平方之哈希表 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 给定的一组 ...
- SDUT 3376 数据结构实验之查找四:二分查找
数据结构实验之查找四:二分查找 Time Limit: 20MS Memory Limit: 65536KB Submit Statistic Problem Description 在一个给定的无重 ...
- SDUT 3374 数据结构实验之查找二:平衡二叉树
数据结构实验之查找二:平衡二叉树 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 根据给定的输 ...
- SDUT-3379_数据结构实验之查找七:线性之哈希表
数据结构实验之查找七:线性之哈希表 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 根据给定的一系列整数关键字和素数p, ...
- SDUT-3378_数据结构实验之查找六:顺序查找
数据结构实验之查找六:顺序查找 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 在一个给定的无序序列里,查找与给定关键字 ...
- SDUT-3377_数据结构实验之查找五:平方之哈希表
数据结构实验之查找五:平方之哈希表 Time Limit: 400 ms Memory Limit: 65536 KiB Problem Description 给定的一组无重复数据的正整数,根据给定 ...
随机推荐
- python之(urllib、urllib2、lxml、Selenium+PhantomJS)爬虫
一.最近在学习网络爬虫的东西,说实话,没有怎么写过爬虫,Java里面使用的爬虫也没有怎么用过.这里主要是学习Python的时候,了解到Python爬虫的强大,和代码的简介,这里会简单的从入门看是说起, ...
- PHP 的闭包
匿名函数 提到闭包就不得不想起匿名函数,也叫闭包函数(closures),貌似PHP闭包实现主要就是靠它.声明一个匿名函数是这样: 1 $func = function() { 2 3 }; //带结 ...
- iOS - 性能优化:Instruments使用简介
最近采用Instruments 来分析整个应用程序的性能.发现很多有意思的点,以及性能优化和一些分析性能消耗的技巧,小结如下. Instruments使用技巧 关于Instruments官方有一个很有 ...
- 【转载】 C#中PadRight函数以特定字符在字符串结尾补足位数
在C#开发过程中字符串String类处理过程中,有时字符串长度不够时,需要在右侧侧指定特定的字符来补足字符串长度,此时可以使用String类下的PadRight方法对字符串结尾按特定的字符补足位数.M ...
- PHP原生EXCEL导出带样式无插件无乱码实现
PHP原生EXCEL导出 经测试 带样式 无插件 无乱码,不需要引入任何插件,不需要修改任何编码 (使用时只需要修改引入php数据库配置文件.修改thead tbody中的数据即可.根据自己的需要去接 ...
- Windows 如何录屏
从Windows10开始,Windows开始自带了录屏功能(XBOX附带的).本来是方便游戏录制,但日常的录制也不在话下. 快捷键:Win + G 打开XBOX的录制工具 在打开录制工具后 Win + ...
- 第十八篇:简易版web服务器开发
在上篇有实现了一个静态的web服务器,可以接收web浏览器的请求,随后对请求消息进行解析,获取客户想要文件的文件名,随后根据文件名返回响应消息:那么这篇我们对该web服务器进行改善,通过多任务.非阻塞 ...
- Formal Analysis of the TLS Handshake Protocol -----论文整理
1.关键词 TLS.SSL.Formal Analsysis Conridentiality Secerecy 2.Table THE SSL/TLS handshake Protocol 3 ...
- PAT基础级-钻石段位样卷2-7-2 吃鱼还是吃肉 (10 分)
国家给出了 8 岁男宝宝的标准身高为 130 厘米.标准体重为 27 公斤:8 岁女宝宝的标准身高为 129 厘米.标准体重为 25 公斤. 现在你要根据小宝宝的身高体重,给出补充营养的建议. 输 ...
- Go语言使用Godep进行包管理
一.为什么要包管理 默认Go的第三方包都是放在Gopath的src目录下,而且这些包都没有版本号的概念,这样的可能会出现一些问题. 举个例子:当A同事将开发完程序之后,此时可能引用了一个第三方的包,过 ...