题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805070971912192

类似题目有FBI树

这两个题有个小技巧,就是建树时是前序遍历,只要将输出放在递归调用之后就是后序遍历了,仔细思考下就能够想明白

对前中后序不熟的记住前中后都是形容跟的次序,左永远在右的前面

建树的时候注意左子树遍历时有i<=r,右子树却只是j>l而没有等号,那是因为可能一个序列只有左子树,所以左子树遍历必须包括所有,而有右子树就肯定有左子树了,就不需要包含了,另外仔细读题,

二叉搜索树的等于号是在右子树(镜像就是左子树)

一开始设不是镜像跑一次,向量大小不为n就清空在按照是镜像跑一次

 #include <bits/stdc++.h>
using namespace std;
const int inf=<<;
typedef long long ll;
typedef pair<int,int> P;
const double pi=acos(-);
const int mod=1e8+;
const int maxn=;
const int maxm=;
int a[maxn];
bool is_mirror;
vector<int> v;
void maketree(int l,int r){
if(l>r) return ;
int i=l+,j=r;//因为是前序遍历,开头第一个是根,此时i在左子树,j在右子树
if(!is_mirror){
while(i<=r&&a[l]>a[i]) i++;//非镜像左子树都比根小,循环结束把左子树遍历完后i跑到右子树的第一个
while(j>l&&a[j]>=a[l]) j--;
}else{
while(i<=r&&a[l]<=a[i]) i++;
while(j>l&&a[j]<a[l]) j--;
}
if(i-j!=) return ;
maketree(l+,j);//左子树
maketree(i,r);//右子树
v.push_back(a[l]);//按照前序建树,递归后在输出就是后序了,可以仔细想想,类似题有FBI树
}
int main(){
int n;scanf("%d",&n);
for(int i=;i<n;i++)scanf("%d",&a[i]);
maketree(,n-);
if(v.size()!=n){
is_mirror=;
v.clear();
maketree(,n-);
}
if(v.size()==n){
printf("YES\n%d",v[]);
for(int i=;i<n;i++)printf(" %d",v[i]);
cout<<endl;
}else{
printf("NO\n");
}
return ;
}

GPLT L2-004 这是二叉搜索树吗?的更多相关文章

  1. 天梯 L2 这是二叉搜索树吗?

    L2-004 这是二叉搜索树吗? (25 分) 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值: 其右子树中所有结点的键值大于等于该结点的 ...

  2. L2-004. 这是二叉搜索树吗?

    L2-004. 这是二叉搜索树吗? 题目链接:https://www.patest.cn/contests/gplt/L2-004 这题我的方法是先递归判定是不是二叉搜索树(镜像),再建树输出. 代码 ...

  3. PAT 天梯赛 L2-004 这是二叉搜索树吗?

    递归判断+建树 题目链接:https://www.patest.cn/contests/gplt/L2-004 题解 二叉搜索树的特点就是其根节点的值是位于左右子树之间的,即大于左子树的所有值,但是小 ...

  4. (PAT)L2-004 这是二叉搜索树吗?(数据结构)

    题目链接:https://www.patest.cn/contests/gplt/L2-004 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的 ...

  5. 有序链表转换二叉搜索树(LeetCode)

    将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: 给定有序数组: [-10,-3,0, ...

  6. hdu 3791:二叉搜索树(数据结构,二叉搜索树 BST)

    二叉搜索树 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submiss ...

  7. PAT 天梯赛 L3-010. 是否完全二叉搜索树 【Tree】

    题目链接 https://www.patest.cn/contests/gplt/L3-010 思路 因为是 完全二叉搜索树 可以用 数据 建树的方式 然后 遍历一遍这个 数字 就是 层序遍历 遍历的 ...

  8. PAT 天梯赛练习集 L2-004. 这是二叉搜索树吗?

    题目链接: https://www.patest.cn/contests/gplt/L2-004 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点 ...

  9. [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法

    二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...

随机推荐

  1. 【做题】Codeforces Round #453 (Div. 1) D. Weighting a Tree——拆环

    前言:结论题似乎是我的硬伤…… 题意是给你一个无向图,已知连接到每一个点的边的权值和(为整数,且属于区间[-n,n]),需要求出每条边权值的一个合法解(都要是在区间[-2*n^2,2*n^2]内的整数 ...

  2. (转)tomcat架构&session共享

    (二期)16.tomcat的整体架构与session共享方案 [课程16]tomcat...共享.xmind47.6KB [课程16]tomcat...流程.xmind0.6MB [课程16]tomc ...

  3. js字符串方法、数组方法整理

    push 向数组末尾添加一项 返回值为数组的长度: pop 删除数组最后一项: unshift 向数组开头增加一项: shift 删除数组第一项: splice 删除数组中的值:1 splice(n, ...

  4. printf和std::cout ...endl

    printf效率要比std::cout...endl高些,可以减少打印所花时间

  5. 测试常用的sql语句总结

    测试中常用的sql语句,排名部分先后 1. 查询 SELECT * FROM 表名称 SELECT COUNT(DISTINCT column_name) FROM table_name 指定列的不同 ...

  6. 17秋 SDN课程 第四次上机作业

    1.建立以下拓扑,并连接上ODL控制器. 2.利用ODL下发流表,使得h3在10s内ping不通h1,10s后恢复. 3.借助Postman通过ODL的北向接口下发流表,再利用ODL北向接口查看已下发 ...

  7. Installation Guide of Ubuntu 14.04, 64bit on Dell Server

    Installation Guide of Ubuntu 14.04, 64bit on Dell Server 准备:U盘(已通过ultraiso刻录ISO镜像). 1.插入U盘: 2.启动服务器, ...

  8. .NET下使用 Seq结构化日志系统

    前言 我们公司在日志管理方面一直没有统一,主要痛点有: 每个开发人员都是各用各的,存储日志的形式也是五花八门,如:本地文件,数据库,Redis,MongoDB 由于公司访问服务器要通过堡垒机,所以本机 ...

  9. 【译】第18节---数据注解-ForeignKey

    原文:http://www.entityframeworktutorial.net/code-first/foreignkey-dataannotations-attribute-in-code-fi ...

  10. javascript - 内存空间

    也许很多人像我一样,觉得JS有垃圾回收机制,内存就可以不管了,以至于在全局作用域下定义了很多变量,自以为JS会自动回收,直到最近,看了阮一峰老师,关于javascript内存泄漏的文章时,才发现自己写 ...