二叉排序树(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)的更多相关文章

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

    数据结构实验之查找一:二叉排序树 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 对应给定的一 ...

  2. SDUT 3375 数据结构实验之查找三:树的种类统计

    数据结构实验之查找三:树的种类统计 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 随着卫星成 ...

  3. SDUT-3373_数据结构实验之查找一:二叉排序树

    数据结构实验之查找一:二叉排序树 Time Limit: 400 ms Memory Limit: 65536 KiB Problem Description 对应给定的一个序列可以唯一确定一棵二叉排 ...

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

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

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

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

  6. SDUT 3376 数据结构实验之查找四:二分查找

    数据结构实验之查找四:二分查找 Time Limit: 20MS Memory Limit: 65536KB Submit Statistic Problem Description 在一个给定的无重 ...

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

    数据结构实验之查找二:平衡二叉树 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 根据给定的输 ...

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

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

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

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

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

    数据结构实验之查找五:平方之哈希表 Time Limit: 400 ms Memory Limit: 65536 KiB Problem Description 给定的一组无重复数据的正整数,根据给定 ...

随机推荐

  1. 百人研发团队的难题:研发管理、绩效考核、组织文化和OKR

    分享一个公司规模近200,研发占一半的创业公司 Worktile 在研发团队管理方面的玩法,仅供百人左右研发团队参考~ 什么是研发团队?简单的说,你熟悉的那帮穿格子衬衫,以程序员为核心组成的团队,就是 ...

  2. centos6克隆虚拟机后,网络无法访问和启动

    使用vmware安装centos6虚拟机时, 克隆虚拟机后无法访问网络. 原因是:产生了重复的网卡信息** 克隆后在70-persistent-net.rules文件中会多一行网卡信息,把第一行网卡信 ...

  3. hystrix配置

    一.hystrix在生产中的建议 1.保持timeout的默认值(1000ms),除非需要修改(其实通常会修改) 2.保持threadpool的的线程数为10个,除非需要更多 3.依赖标准的报警和监控 ...

  4. ECMAScript5面向对象技术(2)--函数

    在JavaScript中,函数其实就是对象.使函数不同于其他对象的决定性特点是函数存在一个被称为[[Call]]的内部属性.内部属性无法通过代码访问而是定义了代码执行时的行为.ECMAScript为J ...

  5. 前端之:传统的DOM是如何渲染的?

    a.纯后端渲染:页面发送请求,后端服务器中将数据拼成完整DOM树,并转换成一个字节流作为HTTP Response的body返回给浏览器.优点在于 返回的HTTP Response是包含着全部页面内容 ...

  6. 我是怎么和SAP结缘的 - Jerry的SAP校园招聘之路

    2006年9月,结束了一年的北京中科院实习后,我回到了电子科技大学,此时已经是研三上学期了.有着"金九银十"之称的秋季校园招聘正式开始了. 准备好了简历后,Jerry也加入了浩浩荡 ...

  7. Linux日志查看

    Linux日志查看: 1.Last -a 把从何处登入系统的主机名称或IP地址,显示在最后一行.-d 指定记录文件.指定记录文件.将IP地址转换成主机名称.-f <记录文件>  指定记录文 ...

  8. MaxTenuringThreshold与阈值的动态调整理论详解

    今天会学习“MaxTenuringThreshold”这样一个新的JVM参数,编写的示例还是会基于上一次的代码,新建个类,如下: 接下来给它设置JVM的参数,具体如下: 而接下来会新增三个参数: 这个 ...

  9. pypython解构

    *******重点 解构:把线性结构的元素解开,并按顺序的赋给其他变量 左边接纳的要与右边解开的个数一致. lst = [3,5] first,second = lst print(first,sec ...

  10. 【PAT-一道看着很难的水题】L2-023. 图着色问题

    水题!没其他想说的,还以为可以搞点高大上的搜索呢!十五分钟,暴力两重循环就OK了! 代码如下: #include<iostream> #include<stdio.h> #in ...