递归求解,左右子树保存下来,递归判断左子树和右子树是否为搜索二叉树
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); } };
改进: