递归求解,左右子树保存下来,递归判断左子树和右子树是否为搜索二叉树
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.empty()) return false;
return __VerifySquenceOfBST(sequence);
}
bool __VerifySquenceOfBST(vector<int> sequence){
if(sequence.empty() || sequence.size() == 1) return true;
int root = *(sequence.end()-1);
vector<int> left;
vector<int> right;
int index = 0;
for(int i = 0 ; i<sequence.size()-1;i++){
if(sequence[i] < root) {
left.push_back(sequence[i]);
index ++;
}else if(sequence[i] == root){
return false;
}else{
break;
}
}
while(index < sequence.size() - 1){
if(sequence[index] > root){
right.push_back(sequence[index]);
index ++;
}else{
return false;
}
}
return __VerifySquenceOfBST(left) && __VerifySquenceOfBST(right);
}
};改进:

京公网安备 11010502036488号