题目链接: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. Learning to Track at 100 FPS with Deep Regression Networks ECCV 2016 论文笔记

    Learning to Track at 100 FPS with Deep Regression Networks   ECCV 2016  论文笔记 工程网页:http://davheld.git ...

  2. (zhuan) Where can I start with Deep Learning?

    Where can I start with Deep Learning? By Rotek Song, Deep Reinforcement Learning/Robotics/Computer V ...

  3. 高级定时器TIM1&TIM8

                                               高级定时器 初识stm32高级定时器:      (1)高级控制定时器(TIM1 和 TIM8)和通用定时器在基本 ...

  4. 使用BeautifulSoup 爬取一个页面上的所有的超链接

    # !/usr/bin/python # -*-coding:utf-8-*- import urllib from bs4 import BeautifulSoup response = urlli ...

  5. kylin3

    RDBMS: 关系数据库管理系统(Relational Database Management System),是将数据组织为相关的行和列的系统,而管理关系数据库的计算机软件就是关系数据库管理系统, ...

  6. 消息队列之ActiveMQ简单环境搭建

    准备: 环境:win7,Eclipse,jdk1.8 ActiveMQ版本:ActiveMQ 5.9.0 Release下载地址:http://activemq.apache.org/download ...

  7. shp与json互转(转载)

    转自:http://blog.sina.com.cn/s/blog_673c98be0102v78i.html 对于搞GIS开发的,这2种数据格式太重要了. 一.shp转json 这个要容易些,方法也 ...

  8. Java 字符串常用操作(String类)

    字符串查找 String提供了两种查找字符串的方法,即indexOf与lastIndexOf方法. 1.indexOf(String s) 该方法用于返回参数字符串s在指定字符串中首次出现的索引位置, ...

  9. _itemmod_gem_limit

    该表可以控制特定宝石的数量上限,即使玩家多插了宝石,也不会有相应效果 `entry` 宝石ID `limitCount`上限值 `comment`备注

  10. bzoj 2243: [SDOI2011]染色 线段树区间合并+树链剖分

    2243: [SDOI2011]染色 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 7925  Solved: 2975[Submit][Status ...