数据结构实验之查找一:二叉排序树 (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);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)相关推荐
- SDUT 3379 数据结构实验之查找七:线性之哈希表
数据结构实验之查找七:线性之哈希表 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 根据给定的一系列整数关键字和素数p, ...
- SDUT 3377 数据结构实验之查找五:平方之哈希表
数据结构实验之查找五:平方之哈希表 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 给定的一组 ...
- SDUT-3378_数据结构实验之查找六:顺序查找
数据结构实验之查找六:顺序查找 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 在一个给定的无序序列里,查找与给定关键字 ...
- 数据结构实验之查找七:线性之哈希表
数据结构实验之查找七:线性之哈希表 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 根据给定 ...
- 3374——数据结构实验之查找二:平衡二叉树
数据结构实验之查找二:平衡二叉树 ( LL RR LR RL) Problem Description 根据给定的输入序列建立一棵平衡二叉树,求出建立的平衡二叉树的树根. Input 输入一组测试数据 ...
- 【除留余数法定义hash函数+线性探测法解决hash冲突】数据结构实验之查找七:线性之哈希表
Think: 1知识点:除留余数法定义hash函数+线性探测法解决hash冲突 数据结构实验之查找七:线性之哈希表 Time Limit: 1000MS Memory Limit: 65536KB P ...
- SUTD OJ 数据结构实验之查找二:平衡二叉树
数据结构实验之查找二:平衡二叉树 Time Limit: 400 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 根据给 ...
- 数据结构实验五 查找算法的实现
广州大学学生实验报告 开课实验室:计算机科学与工程实验(电子楼416B) 2019年6月11日 学院 计算机科学与教育软件学院 年级.专业.班 姓名 学号 实验课程名称 数据结构实验 成绩 实 ...
- 数据结构实验之查找一:二叉排序树
题目描述 对应给定的一个序列可以唯一确定一棵二叉排序树.然而,一棵给定的二叉排序树却可以由多种不同的序列得到.例如分别按照序列{3,1,4}和{3,4,1}插入初始为空的二叉排序树,都得到一样的结果. ...
最新文章
- Python工程师求职必知的经典面试题
- SAP Spartacus B2B Unit page convertListItem方法的工作原理
- springboot-RequestMappingHandlerMapping
- C++重载函数和重载运算符
- 2019职称计算机考试哪些地区取消,2019年职称计算机考试注意事项
- SQL 全文索引 CONTAINS
- Helix Streaming Server 简单配置
- Apache OpenOffice-java调用时的问题总结
- 软件升级 防火墙 飞塔_FortiGate软件版本升级
- 输入法突然变成繁体字的解决方法
- word 职称计算机考试大纲,全国职称计算机考试Word2003大纲
- 费式序列(斐波那契数列)
- PS小白怎么学会更换材质效果
- 毛咕咕 百度有啊现在每天的成交量:
- 转:诺贝尔经济学奖得主与数学
- STM32常见通信方式(TTL、RS232、RS485、I2C,SPI,CAN)总结
- TXT文件批量生成二维码
- 【esp8266】③esp8266对接天猫精灵实现语音控制
- 关于数学建模、机器学习与深度学习的思考
- SQL server 将不等于hit的全部删除
热门文章
- python引入redis_实操演练解读非关系型数据库—Redis
- jQuery→事件、jQuery事件对象属性方法、多事件、自定义事件
- 二叉树 中序遍历 python_leetcode No.105 从前序与中序遍历序列构造二叉树
- prim最小生成树算法 邻接表+STL实现
- bzoj 1602: [Usaco2008 Oct]牧场行走(暴力LCA)
- bzoj 1833: [ZJOI2010]count 数字计数(数字0-9的个数)
- bzoj 1432: [ZJOI2009]Function
- 安卓传感器全解:注册、注销传感器、监听传感器,距离传感器、方向传感器、陀螺仪、加速计、磁场、气压传感器
- who whos exist inf
- Python:Numpy库中的invert()函数的用法