数据结构实验之查找一:二叉排序树 (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 给定的一组无重复数据的正整数,根据给定 ...
随机推荐
- C#避免WinForm窗体假死
WinForm窗体在使用过程中如果因为程序等待时间太久而导致窗体本身假死无法控制,会严重影响用户的体验,这种情况大多是UI线程被耗时长的代码操作占用所致,可以新开一个线程用来完成耗时长的操作,然后再将 ...
- VBA Do...While循环
一个Do...while循环用于只要条件为真就重复一组语句.该条件可以在循环开始时或循环结束时检查. 语法 以下是VBA中的一个Do...While循环的语法. Do While condition ...
- Django学习笔记(二)App创建之Model
通过实例学习, 构建一个投票(Polls)Application, 目标结果包含两个site, 一个site用来显示投票问题以及投票结果(即将展示出来的网站), 另一个site用来管理Poll实例的增 ...
- html+css+javascript网页制作技巧总结1
(一)div.元素居中中显示方法: 1.宽度要有实际值或百分比值 2.margin:0px auto; 文本内容居中显示的方法: 1.text-align:center; 2.line-height: ...
- iOS滤镜功能
一.iOS自带滤镜 1.CoreImage 使用苹果自带的CoreImage框架对图片进行处理,用CoreImage框架里的CIFilter对图片进行滤镜处理, 首先我们应该了解下CoreImage框 ...
- ABAP Netweaver体内的那些寄生式编程语言
今天这篇文章的主题是:寄生. Jerry最近看到朋友圈里一位朋友分享的一张寄居蟹的照片,对于Jerry这种在内地长大的又很宅的人来说,没有机会看到寄居蟹,所以觉得很新鲜: 寄居蟹主要以螺壳为寄体,寄居 ...
- LNMP环境搭建之编译安装指南(php-5.3.27.tar.gz)
测试环境:CentOS release 6.5 (Final) 软件安装:nginx mysql-5.5.32-linux2.6-x86_64.tar.gz php-5.3.27.tar.gz ...
- Yarn介绍(设计理念与基本架构)
Yarn : 新的计算框架,是一个全局资源管理器,负责整个集群的资源管理和分配 一. Yarn产生背景 Hadoop1.0MR有局限性,概括为以下几个方面 : 扩展性差 可靠性差 资 ...
- Computer Vision_33_SIFT:ORB_An efficient alternative to SIFT or SURF——2012
此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...
- thinkphp5自动生成文档/注释代码自动生成api文档
composer require weiwei/api-doc dev-master 安装之后,readme 有详细的使用说明代码: 部分界面: gitbub:https://github.com/z ...