二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.empty()) return false;
return judge(sequence);
}
private:
bool judge(vector<int> sequence){
int sz=sequence.size(),pos{-1};
if(sz<=2) return true;
int rootVal=sequence.back();
for(int i=0;i<sz-1;++i){
if(sequence[i]>rootVal){
pos=i;
break;
}
}
bool bres1{true},bres2{true};
if(pos>0){
vector<int> left(sequence.begin(),sequence.begin()+pos);
if(*(max_element(left.begin(),left.end()))>rootVal){
return false;
}//重点
bres1=judge(left);
}
if(pos!=-1){//注意end-1
vector<int> right(sequence.begin()+pos,sequence.end()-1);
if(*(min_element(right.begin(),right.end()))<rootVal){
return false;
}//重点
bres2=judge(right);
}
return bres1&&bres2;
}
};