-
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
-
每个测试案例包括2行:
第一行为1个整数n(1<=n<=10000),表示数组的长度。
第二行包含n个整数,表示这个数组,数组中的数的范围是[0,100000000]。
-
对应每个测试案例,如果输入数组是某二叉搜索树的后序遍历的结果输出Yes,否则输出No。
-
7
-
5 7 6 9 11 10 8
-
4
-
7 4 6 5
-
Yes
-
No
题目链接:1367
题目描述:
-
输入:
-
输出:
-
样例输入:
-
样例输出:
代码:
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
typedef long long ll;
struct Node //结点结构
{
ll val;
Node *left;
Node *right;
};
bool Is_BST(ll *val,int beg,int en)
{
if(beg>en) return true;
int i,j;
ll temp=val[en];
for(i=0;i<en;i++)
{
if(val[i]>temp)
{
break;
}
}
for(j=i+1;j<en;j++)
{
if(val[j]<=temp)
return false;
}
bool left=true;
if(i>0)
left=Is_BST(val,beg,i-1);
bool right=true;
if(i<en-1)
right=Is_BST(val,i+1,en-1);
return left&&right;
}
int main()
{
int n;
while(scanf("%d",&n)==1)
{
ll *val=new ll[n+1];
for(int i=0;i<n;i++)
scanf("%lld",&val[i]);
if(Is_BST(val,0,n-1))
printf("Yes\n");
else
printf("No\n");
}
return 0;
}