#include <iostream>
#include <cstdio>
using namespace std;
bool isTreeOf(int *a, int s, int e)
{
int len = e - s + 1;
int root = a[e];
int i,mid;
bool left, right;
if(len<=2)
return true;
for(i=s; i<e; ++i)
{
if(a[i] > root)
break;
}
mid = i;
while(i<e)
{
if(a[i] < root)
return false;
i++;
}
left = true;
right = true;
if(mid > s)
left = isTreeOf(a, s, mid-1);
if(mid < e)
right = isTreeOf(a, mid, e-1);
return (left && right);
}
int main()
{
int i, n;
int a[10001];
while(EOF != scanf("%d",&n))
{
for(i=0;i<n;++i)
scanf("%d", &a[i]);
if(isTreeOf(a,0,n-1))
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
online_judge_1367
最新推荐文章于 2020-03-04 17:29:00 发布
本文介绍了一种用于判断树结构是否存在的算法实现,通过遍历数组并利用递归方式来验证数组元素是否符合树的定义。算法适用于树形结构的数据验证。

2516

被折叠的 条评论
为什么被折叠?



