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);
    }
};