二叉排序树(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);elseroot -> l = creat(root -> l, x);  // 否则去左子树找}return root;   //别忘记了返回树根!
};
int ok(struct node *t1, struct node *t2)  // 判断两个树是否相同
{if(t1 == NULL && t2 == NULL)   // 如果比较到最下层都没有发现不同的就返回 1return 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);elseroot -> 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;
}

转载于:https://www.cnblogs.com/lcchy/p/10139410.html

数据结构实验之查找一:二叉排序树 (SDUT 3373)相关推荐

  1. SDUT 3379 数据结构实验之查找七:线性之哈希表

    数据结构实验之查找七:线性之哈希表 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 根据给定的一系列整数关键字和素数p, ...

  2. SDUT 3377 数据结构实验之查找五:平方之哈希表

    数据结构实验之查找五:平方之哈希表 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 给定的一组 ...

  3. SDUT-3378_数据结构实验之查找六:顺序查找

    数据结构实验之查找六:顺序查找 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 在一个给定的无序序列里,查找与给定关键字 ...

  4. 数据结构实验之查找七:线性之哈希表

    数据结构实验之查找七:线性之哈希表 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 根据给定 ...

  5. 3374——数据结构实验之查找二:平衡二叉树

    数据结构实验之查找二:平衡二叉树 ( LL RR LR RL) Problem Description 根据给定的输入序列建立一棵平衡二叉树,求出建立的平衡二叉树的树根. Input 输入一组测试数据 ...

  6. 【除留余数法定义hash函数+线性探测法解决hash冲突】数据结构实验之查找七:线性之哈希表

    Think: 1知识点:除留余数法定义hash函数+线性探测法解决hash冲突 数据结构实验之查找七:线性之哈希表 Time Limit: 1000MS Memory Limit: 65536KB P ...

  7. SUTD OJ 数据结构实验之查找二:平衡二叉树

    数据结构实验之查找二:平衡二叉树 Time Limit: 400 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 根据给 ...

  8. 数据结构实验五 查找算法的实现

    广州大学学生实验报告 开课实验室:计算机科学与工程实验(电子楼416B)     2019年6月11日 学院 计算机科学与教育软件学院 年级.专业.班 姓名 学号 实验课程名称 数据结构实验 成绩 实 ...

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

    题目描述 对应给定的一个序列可以唯一确定一棵二叉排序树.然而,一棵给定的二叉排序树却可以由多种不同的序列得到.例如分别按照序列{3,1,4}和{3,4,1}插入初始为空的二叉排序树,都得到一样的结果. ...

最新文章

  1. Python控制流---while循环
  2. fmpeg 编译编码 _libx264和librtmp
  3. 键盘控制事件应用教程大全
  4. 为什么大公司一定要使用DevOps
  5. 【Electron】Electron开发入门(一):开发环境搭建
  6. android 判断当前窗口,Android判断当前界面是否是home界面
  7. 年轻人求知欲让我想办CPU设计免费培训
  8. python:求100以内素数的和
  9. JavaSE 计算机基础知识 Java语言概述 JDK的下载,安装 HelloWorld案例 环境变量的配置 注释 关键字 标识符
  10. 第四届“安洵杯”网络安全挑战赛MISC-Writeup
  11. TCP SYN洪水 (SYN Flood) 攻击原理与实现
  12. 2022年自动化专业、电气工程及其自动化专业大学生可以参加哪些专业相关的竞赛?
  13. 梅花雪MzTreeView2.0 的checkbox完全攻略
  14. 我,是如何度过人生最艰难的时刻的
  15. “盲人”马云:骑着盲虎贩卖梦想
  16. C语言 输入一个不大于五位的数字,先判断是几位数字,然后将其数字顺序输出和逆序输出
  17. 微信小程序 音乐播放代码(播放方式,歌词滚动) (更新优化版:添加文字颜色过渡)
  18. pdf文件如何删除其中一页内容
  19. 写论文用到的制作图表/流程图的好用软件和链接
  20. 3Com 905系列介绍

热门文章

  1. Oracle→分组函数、GROUP BY、HAVING、多表查询、连接、外连接、自连接、子查询单行多行、ROWNUM、ANY、ALL、NOT IN(...IS NOT NULL)、条件求和、DUAL
  2. JavaScript数据类型之比较运算符(8)
  3. Python入门--列表元素的增加操作,append(),extend(),insert(),切片
  4. 穿上马甲就没认出polya定理之典型题目手环
  5. commons-fileupload的ServletFileUpload类
  6. 操作系统—内存的基础知识
  7. 2013蓝桥杯C++B:错误票据
  8. bzoj 1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛
  9. 51nod-1391:01串
  10. [paper reading] ResNet