#include<iostream>
using namespace std;
bool recur( int a[] , int start , int end ) {
if( start <= end ) {
int mid;
int i = end - 1;
bool flag = true;
//从左向右,找到[start,end)区间第一个比a[end]大的元素
for( i = start ; i < end ; i ++ ) {
if( a[ i ] > a[ end ] ) {
break;
}
}
mid = i;
for( i = mid ; i < end ; i ++ ) {
if( a[ i ] < a[ end ] ) {
return false;
}
}
return( recur( a , start , mid - 1 ) && ( a , mid , end - 1 ) );
}
return true;
}
int main() {
//简化一下程序,首先输入这个序列的长度,为了避免串操作
int length;
int a[ 100 ];
int i;
bool flag;
scanf( "%d" , & length );
for( i = 0 ; i < length ; ++ i ) {
scanf( "%d" , & a[ i ] );
}
flag = recur( a , 0 , length - 1 );
if( flag ){
printf( "yes\n" );
}
else {
printf( "no\n" );
}
return 1;
}
/*
7
5 7 6 9 11 10 8
4
7 4 6 5
*/
判断一个序列是否是BST的后序遍历结果,假设没有重复元素
最新推荐文章于 2018-11-09 15:09:53 发布