给个后序遍历序列,判断是否是二叉搜索树的。
根据定义,最后一个是根,先判断能否按大小分成两部分,然后两部分分别递归。
code
class Solution {
public:
bool verifyPostorder(vector<int>& postorder) {
int n=postorder.size();
if(n==0){
return true;
}
int i=0;
for(;i<n-1;i++){
if(postorder[i]>postorder[n-1]){
break;
}
}
int j=i;
for(;j<n-1;j++){
if(postorder[j]<postorder[n-1]){
return false;
}
}
vector<int> left;
vector<int> right;
for(int k=0;k<i;k++){
left.push_back(postorder[k]);
}
for(int k=i;k<n-1;k++){
right.push_back(postorder[k]);
}
return (verifyPostorder(left) && verifyPostorder(right));
}
};