class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence) {
        if (sequence.empty())
            return false;

        return find(sequence);
    }

    bool find(vector<int> sequence) {
        if (sequence.empty())
            return true;
        int back = sequence.back();
        auto pin = sequence.begin();
        while(pin != sequence.end()){
            if (*pin < back)
                ++pin;
            else
                break;
        }
        // 此时的pin指向第一个大于back的值或者end指针
        vector<int> seq1(sequence.begin(), pin);
        auto pin1 = pin;
        // 检查右子树是否合规,这里面有back值
        while (pin != sequence.end()){
            if (*pin >= back)
                ++pin;
            else
                return false;
        }
        // 检查完后构造第二个seq
        vector<int> seq2(pin1, sequence.end()-1);
        return find(seq1) && find(seq2);
    }
};

题干:判断一个序列是否是二叉搜索树的后序遍历,且该序列的值均不相同
参考别人的思想,若问题为true,则序列最后元素为树节点,根据其可以将序列分为左子树和右子树两部分。find函数是递归部分
1、首先根据back值分出左子树部分,接着检查右子树部分是否满足都大于back,满足条件则开始下一轮递归
2、这里要注意起初空序列返回为false,但之后若左子树或右子树为空要返回true,所以单独写了递归函数