题目描述 给定一个有 n 个不重复整数的数组 arr,判断 arr 是否可能是节点值类型为整数的搜索二叉树后序遍历的结果。 输入描述:
第一行一个整数 n,表示数组的长度。第二行 n 个整数 arr_i。 输出描述: 如果是搜索二叉树后序遍历的结果则输出 “true”,否则输出 “false”。
输入
3
1 3 2
输出
true
#include<bits/stdc++.h>
using namespace std;
const int MAX = 500005;
int input[MAX];
bool isSearchTree(int res[],int low,int high){
if(low==high)
return true;
int less = low-1;
int more = high;
for(int i=low;i<high;i++){
if(res[high]>res[i])
less=i;
else
more = more==high?i:more;
}
if(less==low-1||more==high){
return isSearchTree(res, low,high-1);
}
if(less!=more-1)
return false;
return isSearchTree(res,low,less)&&isSearchTree(res,more, high-1);
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
scanf("%d",&input[i]);
}
if(n==0)
cout<<"false"<<endl;
else{
bool r = isSearchTree(input,0,n-1);
if(r)
cout<<"true"<<endl;
else
cout<<"false"<<endl;
}
}