二叉搜索树:如果左子树不为空,那么左子树的数逗比根的数小,右子树的数比根的数大
从前往后找,比根小的就是左子树(根是最后一个,后序遍历),其余就是右子树,然后递归!
#include<cstdio>
#include<cstring>
int a[10004];
bool check(int s,int e)
{
if(s >= e)
return true;
int p = s;
while(p < e && a[p] <= a[e]) //p不能等于e,不然会无限循环3 4 5
{
p++;
}
for(int i=p;i<e;i++)
{
if(a[i] < a[e])
return false;
}
return (check(s,p-1) && check(p,e-1));
}
int main()
{
int n;
while(scanf("%d",&n) != EOF)
{
for(int i=0;i<n;++i)
{
scanf("%d",&a[i]);
}
if(check(0,n-1))
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}