class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence) {
        if(sequence.size() == 0) return false;
        queue<int> que;  
        for(auto x : sequence) que.push(x);  //队列记录当前sequence的值
        sort(sequence.begin(),sequence.end());   //从小到大排序,形成中序遍历序列
        stack<int> sta;   //利用栈判断结果,中序遍历的进栈以某种方式出栈一定可以形成后序遍历序列
        int i = 0;
        while(i <= sequence.size()){
            if(sta.size() == 0 && que.size() == 0) return true;  //都空了表示成功
            if(i == sequence.size()) return false;  //i超过了序列数,此时如果栈队不空则说明不行
            sta.push(sequence[i]);
            while(sta.top() == que.front()){  //栈顶和队头相等,出栈出队,表示本次后序和中序可以转换
                sta.pop();
                que.pop();
                if(sta.size() == 0) break;   //直到栈空或者二者不等结束
            }
            i++;
        }
        return false;
    }
};