输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。假设输入的数组的任意两个数字都互不相同。
5 7 6 9 11 10 8Yes
7 4 6 5No
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length==0) return false;
return F(sequence, 0, sequence.length-1);
}
public boolean F(int[] sequence, int start, int end){
if(start>= end) return true;
//从后往前找到左右子树分割的位置
int rightIndex = end-1;
while(rightIndex>=start){
if(sequence[rightIndex]>sequence[end]) rightIndex--;
else break;
}
rightIndex++;
//继续往前,如果符合二叉搜索树,应该是每一个都比自己小
int leftIndex = rightIndex-1;
while(leftIndex>=start){
if(sequence[leftIndex]<sequence[end]) leftIndex--;
else break;
}
//如果leftIndex!=start-1说明左子树有比自己大的
if(leftIndex != start-1){
return false;
}
else{
return F(sequence, start, rightIndex-1) && F(sequence, rightIndex, end-1);
}
}
}