时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:6321

解决:2767

题目描述:
判断两序列是否为同一二叉搜索树序列
输入:
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。

接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。

接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
输出:

如果序列相同则输出YES,否则输出NO

样例输入:
2
567432
543267
576342
0
样例输出:
YES
NO
来源:
2010年浙江大学计算机及软件工程研究生机试真题

思路:

有两种方法,一种是静态数组模拟二叉树,另一种是直接建树。

判断相等用递归即可。

代码:

#include <stdio.h>
#include <stdlib.h> #define M 10 struct node {
int k;
struct node *l;
struct node *r;
}; struct node *create (struct node *h, int k)
{
if (h == NULL)
{
struct node *p = malloc(sizeof(struct node));
p->k = k;
p->l = NULL;
p->r = NULL;
return p;
}
if (k == h->k)
return h;
if (k < h->k)
h->l = create(h->l, k);
else
h->r = create(h->r, k);
return h;
} int issame(struct node *ha, struct node *hb)
{
if (ha == NULL && hb == NULL)
return 1;
if (ha == NULL || hb == NULL)
return 0; if (ha->k != hb->k)
return 0;
if ( issame(ha->l, hb->l) == 0)
return 0;
if ( issame(ha->r, hb->r) == 0)
return 0;
return 1;
} void delete(struct node *h)
{
if (h == NULL)
return;
delete(h->l);
delete(h->r);
free(h);
} int main()
{
int i, k, n, tmp;
int result;
char s[M+1];
struct node *ha = NULL, *hb = NULL; while(scanf("%d", &n) != EOF)
{
if (n == 0)
break; ha = NULL;
scanf("%s", s);
for (i=0; s[i]; i++)
{
tmp = s[i]-48;
//printf("i=%d\n", i);
ha = create(ha, tmp);
} for (k=0; k<n; k++)
{
hb = NULL;
scanf("%s", s);
for (i=0; s[i]; i++)
{
tmp = s[i]-48;
//printf("i=%d\n", i);
hb = create(hb, tmp);
} result = issame(ha, hb);
if (result == 1)
printf("YES\n");
else
printf("NO\n"); delete(hb);
}
}
return 0;
}
/**************************************************************
Problem: 1009
User: liangrx06
Language: C
Result: Accepted
Time:0 ms
Memory:912 kb
****************************************************************/

九度OJ 1009:二叉搜索树 (二叉树)的更多相关文章

  1. 二叉搜索树 & 二叉树 & 遍历方法

    二叉搜索树 & 二叉树 & 遍历方法 二叉搜索树 BST / binary search tree https://en.wikipedia.org/wiki/Binary_searc ...

  2. 【九度OJ】题目1113:二叉树 解题报告

    [九度OJ]题目1113:二叉树 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1113 题目描述: 如上所示,由正整数1,2,3-- ...

  3. 【九度OJ】题目1078:二叉树遍历 解题报告

    [九度OJ]题目1078:二叉树遍历 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1078 题目描述: 二叉树的前序.中序.后序遍历 ...

  4. HDU3791二叉搜索树(二叉树)

    Problem Description 判断两序列是否为同一二叉搜索树序列   Input 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束.接下去一行是一 ...

  5. 九度oj题目1385:重建二叉树

    题目1385:重建二叉树 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4419 解决:1311 题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和 ...

  6. 九度OJ 1201:二叉排序树 (二叉树)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4894 解决:2062 题目描述: 输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历. 输入: 输入第一行包括一个整数n(1< ...

  7. 九度OJ 1513 二进制中1的个数

    题目地址:http://ac.jobdu.com/problem.php?pid=1513 题目描述: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 输入: 输入可能包含多个测试样 ...

  8. 九度OJ 1035:找出直系亲属(二叉树)

    题目1035:找出直系亲属 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1309 解决:521 题目描述: 如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如 ...

  9. 九度oj 题目1385:重建二叉树

    题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7 ...

随机推荐

  1. UVA 10976 Fractions Again?!【暴力枚举/注意推导下/分子分母分开保存】

    [题意]:给你一个数k,求所有使得1/k = 1/x + 1/y成立的x≥y的整数对. [分析]:枚举所有在区间[k+1, 2k]上的 y 即可,当 1/k - 1/y 的结果分子为1即为一组解. [ ...

  2. SQLite复杂表的更新方式

    SQLite复杂表的更新方式   在SQLite中,如果早期设计的表无法满足需要,就需要对表进行更新,如修改名字.添加列.如果针对简单表,修改起来相对容易,直接使用提供的ALTER命令即可.但是如果该 ...

  3. Loj #6164. 「美团 CodeM 初赛 Round A」数列互质

    link : https://loj.ac/problem/6164 莫队傻题,直接容斥做. #include<bits/stdc++.h> #define maxn 100005 #de ...

  4. 深入浅出 Cocoa 之 Core Data(1)- 框架详解

    深入浅出 Cocoa 之 Core Data(1)- 框架详解 罗朝辉(http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 Core data 是 Cocoa 中处 ...

  5. Blocks的申明调用与Queue当做锁的用法

    Blocks的申明与调用 话说Blocks在方法内使用还是挺方便的,之前都是把相同的代码封装成外部函数,然后在一个方法里需要的时候调用,这样挺麻烦的.使用Blocks之后,我们可以把相同代码在这个方法 ...

  6. Create Data Block Based On From Clause Query In Oracle Forms

    Example is given below to create a data block based on From Clause query in Oracle Forms. The follow ...

  7. Exception:System.Threading.SemaphoreFullException

    ylbtech-Error-Exception-C#: System.Threading.SemaphoreFullException    1.A,异常类型返回顶部 1,异常名称System.Thr ...

  8. 一群牛人翻译:The Swift Programming Language 中文版

    无聊闲逛GIthub,看到一群牛人在github上创建了一个关于Switf的文档翻译项目 The Swift Programming Language 中文版 项目地址:中文版 Apple 官方 Sw ...

  9. 手动脱Mole Box壳实战总结

    作者:Fly2015 这个程序是吾爱破解脱壳练习第8期的加壳程序,该程序的壳是MoleBox V2.6.5壳,这些都是广告,能够直接无视了.前面的博客手动脱Mole Box V2.6.5壳实战中已经给 ...

  10. 自定义序列化技术3 (.net 序列化技术) C++ 调用C# DLL

    打开SerializableAttribute利用里面的函数进行编辑. // sparse.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" ...