题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
分析:
后续遍历要求左子树大于根大于右子树,数组最后一个元素为根。数组前半段小于最后一个元素,为左子树;后半段大于最后一个元素,为右子树,否则返回false;对左子树和右子树分别进行递归,划分所有子树。
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.empty()){
return false;
}
int len=sequence.size();
vector<int> len_left;
vector<int> len_right;
int i=0;
for( ;i<len-1;i++){
if(sequence[i]<sequence[len-1]){
len_left.push_back(sequence[i]);
}
else{
break;
}
}
for( ;i<len-1;i++){
if(sequence[i]>sequence[len-1]){
len_right.push_back(sequence[i]);
}
else{
return false;
}
}
bool left=true,right=true;
if(!len_left.empty()){
left=VerifySquenceOfBST(len_left);
}
if(!len_right.empty()){
right=VerifySquenceOfBST(len_right);
}
return left&&right;
}
};