九度oj题目1009:二叉搜索树
题目描述:
- 输入:
-
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。 接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。 接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
- 输出:
-
如果序列相同则输出YES,否则输出NO
- 样例输入:
-
- 2
- 567432
- 543267
- 576342
- 0
- 2
- 样例输出:
-
- 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 ;
- }
这道题的思路是用数组记录建好树后每一个数字的位置,通过比较位置信息来判断是不是同一棵树
- YES
九度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 ...
随机推荐
- How many '1's are there题解
Description: Description: 第一行输入数字n(n<=50),表示有n组测试用例,第2到第n+1行每行输入数m(m为整数),统计并输出m用二进制表示时,1的个数. 例如:m ...
- [习题]输入自己的生日(年/月/日)#2 -- 日历(Calendar)控件的时光跳跃,一次跳回五年、十年前?--TodaysDate属性、VisibleDate属性
原文出處 http://www.dotblogs.com.tw/mis2000lab/archive/2013/06/10/calendar_visibledate_birthday_dropdow ...
- 使用JDK自带的jmap和jhat监控处于运行状态的Java进程
对于处于运行状态中的Java进程,JDK自带了很多工具,允许Java开发人员监控运行进程中的各种状态,比如该进程内部创建了多少个对象实例,消耗了多少内存,等等. 本文基于JDK1.8而写成. 我下面写 ...
- (转)MyBatis框架的学习(七)——MyBatis逆向工程自动生成代码
http://blog.csdn.net/yerenyuan_pku/article/details/71909325 什么是逆向工程 MyBatis的一个主要的特点就是需要程序员自己编写sql,那么 ...
- Maven添加本地依赖
在写本文的时候先来说明一下maven依赖的各种范围的意思 compile(编译范围) compile 是默认的范围:如果没有提供一个范围,那该依赖的范围就是编译范围.编译范围依赖在所有的c ...
- MVC使用方法
1.mvc打开html代码 后台处理: ///<summary> ///恢复html中的特殊字符 ///</summary> ...
- 什么是Java内存模型中的happens-before
Java内存模型JMM Java内存模型(即Java Memory Model , 简称JMM),本身是一种抽象的概念,并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序个各个变量(包括实 ...
- Codeforces Round #510 #A
http://codeforces.com/contest/1042/problem/A 题目大意就是: 现在公园里有n个长椅(要多长有多长),第i个长椅上有a[i]个人(泰山崩于前而不乱),现在又有 ...
- [LUOGU] P2716 和谐的雪花
https://www.luogu.org/problemnew/show/P2716 给出一个n*m的矩形,求里面边长最小的正方形,使得该正方形内最大值与最小值的差大于等于给定的K. 第一反应是二分 ...
- Spring中使用注解 @Scheduled 执行定时任务
来自:http://blog.51cto.com/dwf07223/1557145 注解@Scheduled 可以作为一个触发源添加到一个方法中,例如,以下的方法将以一个固定延迟时间5秒钟调用一次执行 ...