PAT 天梯赛练习集 L2-004. 这是二叉搜索树吗?
题目链接: https://www.patest.cn/contests/gplt/L2-004
一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点,
- 其左子树中所有结点的键值小于该结点的键值;
- 其右子树中所有结点的键值大于等于该结点的键值;
- 其左右子树都是二叉搜索树。
所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树。
给定一个整数键值序列,现请你编写程序,判断这是否是对一棵二叉搜索树或其镜像进行前序遍历的结果。
输入格式:
输入的第一行给出正整数N(<=1000)。随后一行给出N个整数键值,其间以空格分隔。
输出格式:
如果输入序列是对一棵二叉搜索树或其镜像进行前序遍历的结果,则首先在一行中输出“YES”,然后在下一行输出该树后序遍历的结果。数字间有1个空格,一行的首尾不得有多余空格。若答案是否,则输出“NO”。
输入样例1:
7
8 6 5 7 10 8 11
输出样例1:
YES
5 7 6 8 11 10 8
输入样例2:
7
8 10 11 8 6 7 5
输出样例2:
YES
11 8 10 7 5 6 8
输入样例3:
7
8 6 8 5 10 9 11
输出样例3:
NO 对于二叉搜索树中序遍历的结果唯一,因此将输入的数列从小到大、从大到小重排可以分别得到原树和镜像树的中序序列;已知前序和中序的数列可以确定一棵树,模拟建树,如果建成的树包含所有输入节点,则表示是二叉搜索树。因为数据范围1000,因此要模拟链表储存,我是用字符串'0'表示左孩子'1'表示右孩子然后对字符串建立索引作为存储下标。
代码:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#define INF 0x3f3f3f3f
#define lowbit(x) (x&(-x))
#define eps 0.00000001
#define pn printf("\n")
using namespace std;
typedef long long ll; int pre[];
int in[];
int n, p, b;
map <int,int> mp;
map <string, int> ind;
int cnt = ; void find(string S, int s, int e)// [s,e)
{
int k = -;
for(int i=s;i<e;i++)
if(in[i] == pre[p])
{
k = i;
if(!b) break;
}
if(k == -)
{
--p;
return ;
}
mp[ind[S] = cnt++] = pre[p];
++p;
find(S + '', s, k);
++p;
find(S + '', k + , e);
} int pf = ;
void print(string s)
{
if(ind.count(s+'') && mp.count(ind[s+''])) print(s + '');
if(ind.count(s+'') && mp.count(ind[s+''])) print(s + '');
if(!pf) pf = ;
else printf(" ");
printf("%d", mp[ind[s]]);
} int main()
{
cin >> n;
for(int i=;i<n;i++)
{
cin >> pre[i];
in[i] = pre[i];
}
int fl = ;
{// zheng
sort(in, in + n);
p = ; b = ;
find("", , n);
if(mp.size() == n)
{
printf("YES\n");
fl = ;
print(""); pn;
}
}
if(!fl)
{// fan
sort(in, in + n,[](int a, int b){return a >= b;});
p = ; b = ;
mp.clear();
find("", , n);
if(mp.size() == n)
{
printf("YES\n");
fl = ;
print(""); pn;
}
}
if(!fl) printf("NO\n");
}
PAT 天梯赛练习集 L2-004. 这是二叉搜索树吗?的更多相关文章
- PAT 天梯赛练习集 L2-022. 重排链表
题目链接:https://www.patest.cn/contests/gplt/L2-022 给定一个单链表 L1→L2→...→Ln-1→Ln,请编写程序将链表重新排列为 Ln→L1→Ln-1→L ...
- PAT 团体程序设计天梯赛-练习集 L1-017. 到底有多二
一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值.如果这个数是负数,则程度增加0.5倍:如果还是个偶数,则再增加1倍.例如数字“-13142223336”是个11位数,其中有3个2,并且 ...
- PAT 天梯赛练习集 L2-016. 愿天下有情人都是失散多年的兄妹
题目链接:https://www.patest.cn/contests/gplt/L2-016 呵呵.大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人.父母.祖父母.曾祖父母. ...
- PAT 天梯赛练习集 L1-006. 连续因子
题目链接:https://www.patest.cn/contests/gplt/L1-006 一个正整数N的因子中可能存在若干连续的数字.例如630可以分解为3*5*6*7,其中5.6.7就是3个连 ...
- 团体程序设计天梯赛-练习集L1-017. 到底有多二
L1-017. 到底有多二 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一个整数“犯二的程度”定义为该数字中包含2的个数与其 ...
- PAT A1143 Lowest Common Ancestor (30 分)——二叉搜索树,lca
The lowest common ancestor (LCA) of two nodes U and V in a tree is the deepest node that has both U ...
- PTA L2-001 紧急救援-最短路(Dijkstra)多条最短路找最优解并输出路径 团体程序设计天梯赛-练习集
L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快 ...
- PAT天梯赛练习题 L3-010. 是否完全二叉搜索树(完全二叉树的判断)
L3-010. 是否完全二叉搜索树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的二叉搜 ...
- 04-树7 二叉搜索树的操作集(30 point(s)) 【Tree】
04-树7 二叉搜索树的操作集(30 point(s)) 本题要求实现给定二叉搜索树的5种常用操作. 函数接口定义: BinTree Insert( BinTree BST, ElementType ...
随机推荐
- jquery为元素绑定事件
语法 $(selector).live(event,data,function) 参数event 必需,规定附加到元素的一个或多个事件.由空格分隔多个事件,必须是有效的事件.data 可选,规定传递到 ...
- 【JavaScript框架封装】实现一个类似于JQuery的基础框架、事件框架、CSS框架、属性框架、内容框架、动画框架整体架构的搭建
/* * @Author: 我爱科技论坛 * @Time: 20180715 * @Desc: 实现一个类似于JQuery功能的框架 * V 1.0: 实现了基础框架.事件框架.CSS框架.属性框架. ...
- 【CodeForces 574B】Bear and Three Musketeers
[链接] 我是链接,点我呀:) [题意] [题解] 枚举每一条边(x,y) 然后再枚举y的出度z 看看g[x][z]是否等于1(表示联通) 如果等于1就说明找到了一个三元环,则尝试用它们的出度和-6更 ...
- Strtus配置Tomcat出现问题
在使用 eclipse 过程中,如果你加入了某些自定义的框架(比如 struts)后,在启动 services 后, 控制台出现一片红色的字样,表明有问题.这时仔细查看 eclipse 控制台信息, ...
- 2014年spark开发人员大赛火热进行中!
"发现最有正能量的网络达人".Spark开发人员大赛火热进行! watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd3d0dHoxOTc0/ ...
- POI对Excel单元格进行颜色设置
POI对Excel单元格进行颜色设置 学习了:http://www.myexception.cn/program/1932587.html HSSFWorkbook workbook = new HS ...
- Tcl学习之--表达式
l 数值操作数 表达式的操作数一般是整数或实数.整数可能是十进制.二进制,八进制或十六进制. 比方以下同一个整数 335 --> 十进制 0o517 ...
- Android scrollTo() scrollBy() Scroller解说及应用
版本号:1.0 日期:2014.6.17 2014.6.18 版权:© 2014 kince 转载注明出处 scrollTo() .scrollBy()及 Scroller在视图滑动中常常使用 ...
- 线程基础:JDK1.5+(8)——线程新特性(上)
1.概要 假设您阅读JAVA的源码.出现最多的代码作者包含:Doug Lea.Mark Reinhold.Josh Bloch.Arthur van Hoff.Neal Gafter.Pavani D ...
- CSDN的技术问题
说CSDN是国内最大最好的技术论坛.预计不会有人反对,可是...CSDN的人,如管理员懂技术吗? 假设您长期在CSDN混.您就会发现他们相当懂得......强奸技术!