一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点,

  • 其左子树中所有结点的键值小于该结点的键值;
  • 其右子树中所有结点的键值大于等于该结点的键值;
  • 其左右子树都是二叉搜索树。

所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树。

给定一个整数键值序列,现请你编写程序,判断这是否是对一棵二叉搜索树或其镜像进行前序遍历的结果。

输入格式:

输入的第一行给出正整数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

提交代码

题目的意思很简单 给定一个整数键值序列,现请你编写程序,判断这是否是对一棵二叉搜索树或其镜像进行前序遍历的结果。

所谓的镜像无非就是 l->key<=root->key < r->key  (看清题目。, 等号很重要)

自己写的代码 丑的不行看了下大神的代码,,。 居然用数组直接模拟, 厉害了

#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std;
int n,a[1001];
vector<int> line;
// 如果给定的序列是搜索二叉树或者变形搜索二叉的前序遍历方式 那么就可以不断的把理出左子树 右子树 并且压人记录链表中 如果能够全部压进去 那就没有问题~
void get_line(int flag,int root,int tail)
{
int i,j;
if(root>tail) return;
i=root+1,j=tail;
if(flag)
{
while( i<=tail && a[root]>a[i]) i++;//由于是前序遍历 i确定右子树root的位置
while( j>root && a[j]>=a[root]) j--;//j确定左子树按前序遍历得到的最后一个节点的位置
}
else
{
while(i<=tail && a[root]<=a[i]) i++;
while(j>root && a[j]<a[root]) j--;
}
if(i-j!=1) return;
get_line(flag,root+1,j);// 先处理左子树
get_line(flag,i,tail);// 在处理右子树
line.push_back(a[root]);// 最后处理当前的根 入队
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
get_line(1,1,n);
int flag=0;
if(line.size()==n)
{
flag=1;
cout<<"YES"<<endl;
cout<<line[0];
for(int i=1;i<line.size();i++) cout<<' '<<line[i];
}
else line.clear();
if(!flag)
{
get_line(0,1,n);
if(line.size()==n)
{
flag=1;
cout<<"YES"<<endl;
cout<<line[0];
for(int i=1; i<line.size(); i++) cout<<' '<<line[i];
}
else cout<<"NO"<<endl;
} return 0;
}

pat L2_004的更多相关文章

  1. 《转载》PAT 习题

    博客出处:http://blog.csdn.net/zhoufenqin/article/details/50497791 题目出处:https://www.patest.cn/contests/pa ...

  2. PAT Judge

    原题连接:https://pta.patest.cn/pta/test/16/exam/4/question/677 题目如下: The ranklist of PAT is generated fr ...

  3. PAT/字符串处理习题集(二)

    B1024. 科学计数法 (20) Description: 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式[+-][1-9]"."[0-9]+E[+ ...

  4. PAT 1041. 考试座位号(15)

    每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位.正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座 ...

  5. PAT 1040. 有几个PAT(25)

    字符串APPAPT中包含了两个单词"PAT",其中第一个PAT是第2位(P),第4位(A),第6位(T):第二个PAT是第3位(P),第4位(A),第6位(T). 现给定字符串,问 ...

  6. PAT 1032. 挖掘机技术哪家强(20)

    为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过105的正整数N,即参赛人数.随后N行,每行给出一位 ...

  7. pat甲级题解(更新到1013)

    1001. A+B Format (20) 注意负数,没别的了. 用scanf来补 前导0 和 前导的空格 很方便. #include <iostream> #include <cs ...

  8. PAT (Basic Level) Practise 1040 有几个PAT(DP)

    1040. 有几个PAT(25) 时间限制 120 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 字符串APPAPT中包含了两个单 ...

  9. PAT (Basic Level) Practise 1045 快速排序(离散化+主席树区间内的区间求和)

    1045. 快速排序(25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 著名的快速排序算法里有一个经典的划分 ...

随机推荐

  1. pwn学习日记Day20 《程序员的自我修养》读书笔记

    可执行文件的装载与进程 覆盖装入和页映射是两种典型的动态装载方法 进程建立的三步 1.创建一个独立的虚拟地址空间 2.读取可执行文件头,并且建立虚拟空间与可执行文件的映射关系. 3.将CPU的指令寄存 ...

  2. 连接Android模拟器

    一.如何找到adb?    安装夜神安卓模拟器后,电脑桌面会有“夜神模拟器”的启动图标,鼠标右键--打开文件所在的位置,就会进入***\Nox\bin,默认路径是C:\Program Files (x ...

  3. .IllegalArgumentException: Mapped Statements collection does not contain 异常一例【我】

    更新代码后发现几乎所有的sql查询都报错,类似下面: java.lang.RuntimeException: org.mybatis.spring.MyBatisSystemException: ne ...

  4. CentOS7 升级 python3 过程及注意

    • 从官网下载python3的压缩包,解压(以3.5.1版本为例)• 创建安装目录(自定义)sudo mkdir /usr/local/python3• cd 进入解压目录sudo ./configu ...

  5. 修改IDEAL 快捷键风格

    选择File------Setting-----进入到设置窗口-------keymap--------选择自己适应的快捷键风格 选择Eclipse后Ideal的快捷键就和Eclipse相同

  6. 去除表视图section的粘性问题

    //  去除section的粘性 - (void)scrollViewDidScroll:(UIScrollView *)scrollView{ if (scrollView == self.tabl ...

  7. Python的数据类型与数据结构

    Python的数据类型与数据结构 数据类型分为: 整数型 :数字的整数 浮点型: 数字带小数 字符串: 用 ‘’ 或者 “” 引用的任意文本 布尔型:只有 True 和 False 数据结构分为: 列 ...

  8. nginx访问日志的几个统计命令

    nginx日志中得到访问量最高前10个IP: cat access.log.10 | awk '{a[$1]++} END {for(b in a) print b"\t"a[b] ...

  9. C-Lodop提示Access violation at address ...in module 'CLodopPrint32.exe' write of address

    C-Lodop提示 Access violation at address ……in module 'CLodopPrint32.exe' write of address ……最近遇到了个问题,上午 ...

  10. elasticsearch启动日志报错not enough master nodes discovered during pinging (found [[]], but needed [-1]), pinging again

    排查步骤 逻辑上讲是,一个节点去ping  master节点,结果却没有得到回应,多次重试依旧失败.应该重点观察: 1.master启动后,IP是否可以有防火墙权限,设置防火墙规则或则直接关闭防火墙 ...