九度oj题目1009:二叉搜索树
题目描述:
- 输入:
-
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。 接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。 接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
- 输出:
-
如果序列相同则输出YES,否则输出NO
- 样例输入:
-
2
567432
543267
576342
0
- 样例输出:
-
YES
NO
在九度oj上Pending了两天,今天终于能用了,终于一次就AC了,代码如下:#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string> /*
0
1 2
3 4 5 6
7 8 9 10 11 12 13 14 */
void buildTree(int n,int num[],int tree[],int left[],int right[]) {
for(int i = ; i < ; i++) {
tree[i] = -;
left[i] = -;
right[i] = -;
}
int top = num[];
tree[top] = ;
for(int i = ; i < n; i++) {
top = num[];
int address = ;
while(true) {
if(num[i] < top) {
address = * address + ;
if(left[top] == -) {
left[top] = num[i];
tree[num[i]] = address;
break;
}
else {
top = left[top];
}
}
else if(num[i] > top) {
address = * address + ;
if(right[top] == -) {
right[top] = num[i];
tree[num[i]] = address;
break;
}
else {
top = right[top];
}
}
}//while }
} char s[];
int main(int argc, char const *argv[])
{
int n;
int len;
scanf("%d",&n);
while(n != ) {
int num[];//source
int tree[];//every num's address
int left[];//every num's nextLeft's value
int right[];//every num's nextRight's value
scanf("%s",s);
for(int i = ; i < strlen(s); i++) {
num[i] = s[i] - '';
}
buildTree(strlen(s),num,tree,left,right);
len = strlen(s);
for(int i = ; i < n; i++) {
scanf("%s",s);
int numt[];//source
int treet[];//every num's address
int leftt[];//every num's nextLeft's value
int rightt[];//every num's nextRight's value
for(int i = ; i < strlen(s); i++) {
numt[i] = s[i] - '';
}
buildTree(strlen(s),numt,treet,leftt,rightt);
bool flag = true;
if(strlen(s) != len) {
flag = false;
}
for(int i = ; i < strlen(s) && flag == true; i++) {
if(treet[numt[i]] != tree[numt[i]]) {
flag = false;
break;
}
}
if(flag == false) {
printf("%s\n","NO");
}
else {
printf("%s\n","YES");
}
}
scanf("%d",&n);
}
return ;
}这道题的思路是用数组记录建好树后每一个数字的位置,通过比较位置信息来判断是不是同一棵树
九度oj题目1009:二叉搜索树的更多相关文章
- 九度oj 题目1009:二叉搜索树
题目1009:二叉搜索树 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5733 解决:2538 题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n&l ...
- 九度OJ 题目1384:二维数组中的查找
/********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...
- hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
- 九度oj 题目1007:奥运排序问题
九度oj 题目1007:奥运排序问题 恢复 题目描述: 按要求,给国家进行排名. 输入: 有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...
- 九度oj 题目1367:二叉搜索树的后序遍历序列
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 输入: 每个测试案例包括2行: 第一行为1个整数 ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ题目1105:字符串的反码
tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...
- 九度oj题目1002:Grading
//不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...
随机推荐
- var声明提前 undefined
1.同一代码块内,所有var声明都提前: 2.var 变量的初始化不提前,按顺序执行: 3."undefined"和undefined都存在于window中: 4.if(" ...
- WPF MATERAIL DESIGN TOOKIT
最近有个程序需要用到WPF,本以为WEB可以做到很炫的,没有想到XAML也能做到如此之炫.心动了,那就行动吧. 搜到有各种款式的:METRO风格,RIBBON风格,MATERIAL风格…… 也许是玩W ...
- PaaS优点与限制(3)
PaaS优点与限制(3) PaaS学习笔记目录 PaaS基础学习(1) 在PaaS上开发Web.移动应用(2) PaaS优点与限制(3) 13. PaaS的核心服务 核心服务是指提供数据存储.SQl. ...
- Number of 1 BitsWrite a function that takes an unsigned integer and returns the number of ’1' bits i
Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also know ...
- uvm_reg_model——寄存器模型(一)
对于一个复杂设计,寄存器模型要能够模拟任意数量的寄存器域操作.UVM提供标准的基类库,UVM的寄存器模型来自于继承自VMM的RAL(Register Abstract Layer),现在可以先将寄存器 ...
- IOS博客
http://www.cnblogs.com/lovecode/articles/2249548.html从这个人这里了解了一些关于uiview和uilayer的区别 以及对于渲染和动画也有了一些了解 ...
- SQL简单查询后续记录
--首先创建数据库TEST CREATE DATABASE TEST --创建表tb_user USE TEST CREATE TABLE [tb_user]( [name] [nvarchar] ( ...
- 包含日志文件getshell
包含日志文件getshell 一.包含日志文件漏洞利用概述 当我们没有上传点,并且也没有url_allow_include功能时,我们就可以考虑包含服务器的日志文件. ...
- vijos 1034 家族(水题日常)
描述 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚.如果x,y是亲戚 ...
- MIPS—冒泡排序
SORT 使用冒泡排序对整数数组进行排序,这种排序虽然不是最快的,但却是最简单的. C语言代码 #include<stdio.h> #include<iostream> usi ...