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

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

其左子树中所有结点的键值小于该结点的键值;
其右子树中所有结点的键值大于等于该结点的键值;
其左右子树都是二叉搜索树。
所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树。

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

输入格式:
输入的第一行给出正整数 N(≤1000)。随后一行给出 N 个整数键值,其间以空格分隔。

输出格式:
如果输入序列是对一棵二叉搜索树或其镜像进行前序遍历的结果,则首先在一行中输出 YES ,然后在下一行输出该树后序遍历的结果。数字间有 1 个空格,一行的首尾不得有多余空格。若答案是否,则输出 NO。

题解:

因为给了前序遍历,所以根据前序遍历求出后序遍历,如果前序遍历的大小等于后序遍历,说明后序遍历是存在的,记得题目说了存在镜像情况,所以要求两个后序遍历,有一组满足情况即可

代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e3+8;
vector<int>post;
bool iff=0;
int pre[maxn];
void getpost(int l,int r)
{if(l>r)return ;int i=l+1,j=r;if(!iff){while(i<=r&&pre[l]>pre[i])i++;while(j>l&&pre[l]<=pre[j])j--;}else {while(i<=r&&pre[l]<=pre[i])i++;while(j>l&&pre[l]>pre[j])j--;}if(i!=j+1)return ;getpost(l+1,j);
//	printf("l=%d r=%d pre[l]=%d\n-------\n",l,r,pre[l]);getpost(i,r);
//	printf("l=%d r=%d pre[l]=%d\n",l,r,pre[l]);post.push_back(pre[l]);
}
int main()
{int n;cin>>n;for(int i=0;i<n;i++)cin>>pre[i];getpost(0,n-1);if(post.size()!=n){iff=1;post.clear();getpost(0,n-1);}if(post.size()!=n)cout<<"NO"<<endl;else {cout<<"YES"<<endl;for(int i=0;i<n;i++){if(i!=n-1)cout<<post[i]<<" ";else cout<<post[i];} }return 0;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319113.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【模板】序列自动机

ACM模板 目录构建序列自动机子序列查询构建序列自动机 ne[i][j]存的是在字符串 s 中第 iii 位后面第一个 j(0<j<26)j(0<j<26)j(0<j<26) 字母出现的位置。 void build(char s[]) {int nstrlen(s1);for(int in;i;i--){for(int j0;j<26;j)ne[i-1][j]ne[i][j]…

微软正式发布Azure IoT Central

微软正式发布Azure IoT Central&#xff0c;这是一个面向物联网的软件即服务解决方案。借助该服务&#xff0c;微软旨在提供一种设计、开发、配置和管理IoT设备的低代码方式&#xff0c;同时提供开箱即用的安全性、可伸缩性以及与流程&应用程序集成。Azure IoT Central构建…

ARC115E-LEQ and NEQ【容斥,dp,线段树】

正题 题目链接:https://atcoder.jp/contests/arc115/tasks/arc115_d 题目大意 nnn个数字的序列xxx&#xff0c;第xi∈[1,Ai]∩Zx_i\in [1,A_i]\cap Zxi​∈[1,Ai​]∩Z。要求相邻的不同&#xff0c;求方案数。 1≤n≤5105,1≤Ai≤1091\leq n\leq 5\times 10^5,1\leq A_i\leq 1…

点分治(树分治)

文章目录介绍&#xff1a;题目&#xff1a;做法&#xff1a;模板题 [P3806 【模板】点分治1](https://www.luogu.com.cn/problem/P3806)代码&#xff1a;介绍&#xff1a; 将原问题分解成若干相同形式&#xff0c;相互独立的子问题&#xff0c;各个击破 一般用来解决有关树上路…

【模板】KMP算法、fail树

ACM模板 目录KMP字符串Fail失配树KMP字符串 肖然大佬视频讲解 子串&#xff1a; 从原串中选取连续的一段&#xff0c;即为子串&#xff08;包括空串&#xff09; 前缀&#xff1a; pre(s,k)pre(s,k)pre(s,k) 为 s 前 k 个字符构成的子串 后缀&#xff1a; suf(s,k)suf(s,k)suf…

.NET Standard 2.1 公布

原文: Announcing .NET Standard 2.1校对: Cloud自从大约一年前发布 .NET Standard 2.0以来&#xff0c;我们已经向 .NET Core 2.1 发布了两个更新&#xff0c;并即将发布 .NET Core 2.2 。 现在是时候更新 Standard 了&#xff0c;包括一些新的概念以及一些小改进&#xff0c;…

CF708E-Student‘s Camp【数学期望,dp】

正题 题目链接:https://www.luogu.com.cn/problem/CF708E 题目大意 有n∗mn*mn∗m的矩形网格&#xff0c;然后每次每行最左边和最右边的格子各有pcdp\frac{c}{d}pdc​的概率会消失&#xff0c;进行kkk次。 求最后所有格子依旧四联通的概率&#xff0c;在%(1097)\%(10^97)%(1…

P3806 【模板】点分治1

模板题 P3806 【模板】点分治1 题目描述 给定一棵有 n 个点的树&#xff0c;询问树上距离为 k 的点对是否存在。 详讲 关于点分治具体内容可以看这个 这里主要是详细讲讲代码&#xff1a; getrt是用来求重心&#xff0c;我们利用树型dp的思维来做&#xff0c;即找到该节点所…

ASP.NET Core中使用GraphQL - 第二章 中间件

前文&#xff1a;ASP.NET Core中使用GraphQL - 第一章 Hello World中间件如果你熟悉ASP.NET Core的中间件&#xff0c;你可能会注意到之前的博客中我们已经使用了一个中间件&#xff0c;这个中间件负责输出了当前查询的结果。中间件的定义&#xff1a;中间件是装载在应用程序管…

【模板】AC自动机

ACM模板 目录插入以及构建AC自动机【模板】AC自动机&#xff08;二次加强版&#xff09;ac自动机fail树上dfs序建可持久化线段树插入以及构建AC自动机 #include<queue> #include<string> const int N200010; struct node {int chd[26],fail,cnt; }tree[N]; void i…

ASP.NET Core中Ocelot的使用:基于服务发现的负载均衡

本系列相关文章&#xff1a;《ASP.NET Core中Ocelot的使用&#xff1a;API网关的应用》《ASP.NET Core中Ocelot的使用&#xff1a;基于Spring Clound Netflix Eureka的动态路由》本文将基于前两篇文章所述内容&#xff0c;继续介绍如何在服务发现和动态路由的基础上&#xff0c…

CF643F-Bears and Juice【组合数学】

正题 题目链接:https://www.luogu.com.cn/problem/CF643F 题目大意 题目有点奇怪就直接放翻译了 有 nnn 只熊和若干桶果汁和恰好一桶酒&#xff0c;每一天每只熊会选择一些桶&#xff08;可能不选&#xff09;并各喝一 杯&#xff0c;喝到酒的熊会去睡觉并不再回来&#xff…

【模板】Manacher算法

ACM模板 目录初始化以及构造初始化以及构造 数组下标从1开始即cin>>s1 由于奇回文串和偶回文串某些性质不同&#xff0c;我们首先通过init()操作使得新串中所有回文串的长度都变成奇数&#xff0c;返回值是新串的长度&#xff08;原串中的下标i对应新串中的2i&#xff09…

POJ2155 - Matrix(二维树状数组)

POJ2155 - Matrix 文章目录题目题解&#xff1a;代码题目 给你一个二维矩阵&#xff0c;初始化为0&#xff0c;然后可以进行两次操作&#xff1a; C:x,y,x1,y2 对该小矩阵内的数进行取反 Q:查询某个点是0还是1 题解&#xff1a; C是区间修改&#xff0c;Q是单点查询&#xf…

牛客挑战赛48C-铬合金之声【Prufer序列】

正题 题目链接:https://ac.nowcoder.com/acm/contest/11161/C 题目大意 nnn个点加mmm条边使得不存在环&#xff0c;每种方案的权值是所有联通块的大小乘积。 求所有方案的权值和。 1≤n≤109,1≤m≤1071\leq n\leq 10^9,1\leq m\leq 10^71≤n≤109,1≤m≤107 解题思路 就是分…

F - Sugoroku2(期望dp)

F - Sugoroku2 期望dp&#xff1a;fuf_ufu​表示到达终点的期望于是有 fu{0,u≥nf0,u∈Afu1⋯fumm1f_u\begin{cases} 0,u\ge n \\f_0,u\in A\\ \frac{f_{u1}\dotsf_{um}}{m}1 \end{cases}fu​⎩⎪⎨⎪⎧​0,u≥nf0​,u∈Amfu1​⋯fum​​1​ 由于存在返回f0f_0f0​的操作&…

.NET Core2使用Azure云上的Iot-Hub服务

基于工业4.0大背景下的工业物联网是近几年内热门的话题&#xff0c;依靠信息化技术企业可以实现数字化转型&#xff0c;生产可以实现智能化制造&#xff0c;设备可以实现自动化运作。然而&#xff0c;海量的数据采集是整个建设过程的基础环节&#xff0c;如何处理与利用这海量的…

Matrix Subtraction(小米icpc邀请赛第一场)

Matrix Subtraction 题意&#xff1a; 一个给定的矩阵&#xff0c;然后给定一个子矩阵的大小&#xff0c;子矩阵可以 将覆盖矩阵的区域的值减1&#xff0c;问能否将矩阵全部减为0 题解&#xff1a; 思路和下面这个链接讲的题十分相似 传送 本质就是二维树状数组差分求解 用…

E - Rotate and Flip(线性代数矩阵坐标变换)

E - Rotate and Flip 顺时针 [010−100001][xy1][y−x1]\begin{bmatrix} 0 & 1 & 0\\ -1&0&0\\0 &0&1 \end{bmatrix}\begin{bmatrix} x\\y\\1 \end{bmatrix}\begin{bmatrix} y\\-x\\1 \end{bmatrix}⎣⎡​0−10​100​001​⎦⎤​⎣⎡​xy1​⎦⎤​⎣…

CF755G-PolandBall and Many Other Balls【倍增FFT】

正题 题目链接:https://www.luogu.com.cn/problem/CF755G 题目大意 nnn个东西排成一排&#xff0c;每个组可以选择一个单独的物品或者两个连续的物品&#xff0c;一个物品不同同时在两个组里&#xff0c;但是可以不在组里。对于i∈[1,k]i\in[1,k]i∈[1,k]求分成iii组的方案数。…