题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解题思路:
二叉搜索树的特性是:对于遍历的最后一个数k,可以作为前面所有数的大小分界点,分界的前部分序列都小于k。分界的后部分序列都大于k。值得注意的是,如果k小于前面的所有数或者k大于前面的所有数,则同样是二叉搜索树的后序遍历。以下是我的解题代码:
class Solution {
bool judge(vector<int> &a, int i, int j){
if(j-i <= 2) return true;
int mid=j,k; bool findmid = false;
for(k=i; k<j-1;k++){
if(findmid == false){
if(a[k]>a[j-1]){
findmid = true; mid = k;
}
}
else{
if(a[k]<a[j-1]) return false;
}
}
if(mid == j||mid == i) return true; //如果最后一个数为最大或最小,则同样返回true
return judge(a, i, mid) && judge(a,mid,j-1);
}
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.size() == 0) return false;
bool res = judge(sequence, 0, sequence.size());
return res;
}
};