剣指offer二叉探索木の後序遍歴シーケンス(C++)


タイトルの説明
整数配列を入力し、その配列が二叉探索ツリーの後順に遍歴した結果であるかどうかを判断します.もしそうであればYesを出力し、そうでなければNoを出力します.入力された配列の任意の2つの数字が互いに異なると仮定します.
考え方:
二叉探索ツリーの性質:左サブツリーはルートノード値より小さく、右サブ数はルートノード値より大きい.
後順ループシーケンスの最後の値がルートノードである場合、ルートノードに基づいてシーケンスを左右のサブツリーに分けることができます.判断根拠:左サブツリーの値はいずれもルートより小さく、右サブツリーの値はいずれもルートより大きい.
解題構想:まずシーケンスを遍歴して左サブツリーを得るとbreakし,右サブツリーを判断する(右サブツリーの値がいずれもルートより大きいかどうか)
class Solution {
public:
    bool VerifySquenceOfBST(vector sequence) {
        return VSofBST(sequence,0,sequence.size()-1);
    }
    bool VSofBST(vector seq, int begin, int end)
    {
        if(seq.empty() || begin>end) return false;
        int i=begin;
        for(; iseq[end]) break;
        }
        for(int j=i; jbegin) left=VSofBST(seq, begin, i-1);
        bool right = true;
        if(i