输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。
数据范围: 节点数量 0 \le n \le 10000≤n≤1000 ,节点上的值满足 1 \le val \le 10^{5}1≤val≤105 ,保证节点上的值各不相同
方法一:递归,分治,
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if(!sequence.size()) return false;
int i =0;
int j =sequence.size()-1;
return check(sequence, i, j);
}
bool check(vector<int> sequence, int i, int j){
if(i>=j) return true;
int p = i;
while(sequence[p]<sequence[j]){p++;}
int m = p;
while(sequence[p]>sequence[j]){p++;}
return p==j && check(sequence,i,m-1) && check(sequence,m,j-1);
}
};