二叉排序树(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工程师求职必知的经典面试题
  2. SAP Spartacus B2B Unit page convertListItem方法的工作原理
  3. springboot-RequestMappingHandlerMapping
  4. C++重载函数和重载运算符
  5. 2019职称计算机考试哪些地区取消,2019年职称计算机考试注意事项
  6. SQL 全文索引 CONTAINS
  7. Helix Streaming Server 简单配置
  8. Apache OpenOffice-java调用时的问题总结
  9. 软件升级 防火墙 飞塔_FortiGate软件版本升级
  10. 输入法突然变成繁体字的解决方法
  11. word 职称计算机考试大纲,全国职称计算机考试Word2003大纲
  12. 费式序列(斐波那契数列)
  13. PS小白怎么学会更换材质效果
  14. 毛咕咕 百度有啊现在每天的成交量:
  15. 转:诺贝尔经济学奖得主与数学
  16. STM32常见通信方式(TTL、RS232、RS485、I2C,SPI,CAN)总结
  17. TXT文件批量生成二维码
  18. 【esp8266】③esp8266对接天猫精灵实现语音控制
  19. 关于数学建模、机器学习与深度学习的思考
  20. SQL server 将不等于hit的全部删除

热门文章

  1. python引入redis_实操演练解读非关系型数据库—Redis
  2. jQuery→事件、jQuery事件对象属性方法、多事件、自定义事件
  3. 二叉树 中序遍历 python_leetcode No.105 从前序与中序遍历序列构造二叉树
  4. prim最小生成树算法 邻接表+STL实现
  5. bzoj 1602: [Usaco2008 Oct]牧场行走(暴力LCA)
  6. bzoj 1833: [ZJOI2010]count 数字计数(数字0-9的个数)
  7. bzoj 1432: [ZJOI2009]Function
  8. 安卓传感器全解:注册、注销传感器、监听传感器,距离传感器、方向传感器、陀螺仪、加速计、磁场、气压传感器
  9. who whos exist inf
  10. Python:Numpy库中的invert()函数的用法