class Solution {
    struct TreeNode{
        int val;
        TreeNode* left;
        TreeNode* right;
        TreeNode(int val):val(val),left(nullptr),right(nullptr){}
    };
public:
    TreeNode* build(TreeNode* root,int val)
    {
        if(!root)
        {
            return new TreeNode(val);
        }
        if(root->val<val)
        {
            root->right=build(root->right,val);
        }
        else{
            root->left=build(root->left,val);
        }
        return root;
    }
    void back_order(TreeNode* root, vector<int>& v)
    {
        if(!root)
        {
            return;
        }
        back_order(root->left,v);
        back_order(root->right, v);
        v.push_back(root->val);
    }
    bool VerifySquenceOfBST(vector<int> sequence) {
        if(sequence.empty())
        {
            return false;
        }
       reverse(sequence.begin(),sequence.end());
       TreeNode* root=new TreeNode(sequence[0]);
       auto x=sequence.begin()+1;
       for(auto i=x;i<sequence.end();i++)
       {
        build(root,*i);
       }
       vector<int> v;
       back_order(root,v);
        reverse(sequence.begin(),sequence.end());
        if(sequence==v)
        {
            return true;
        }
        return false;
    }
};