class Solution {
public:
//二叉搜索树:左子树全部小于根节点值,右子树全部大于根节点值
//后序遍历,数组的最后一个值就是根节点;
//通过找出左子树,再检测右子树的办法,然后进行递归分治
bool VerifySquenceOfBST(vector<int> sequence) {
int n = sequence.size();
if(n == 0)return false;
return checkif(sequence, 0, n-1);
}
bool checkif(vector<int>& sequence, int start, int end){
if(start >= end)return true; //可能出现只有单边子树的情况,那么它会出现边界不合法的情况
int rootval = sequence[end];
int i=start; //划分出左子树
while(sequence[i] < rootval){
i++;
}
for(int j=i; j<end; j++){
if(sequence[j] < rootval)return false;
}
return checkif(sequence, start, i-1) && checkif(sequence, i, end-1);
}
};