解题思路:由于是后序遍历结果,也就是数组最后一个元素是根节点root,按照二叉搜索树的定义,数组前面的元素中前半部分比root小,后半部分比root大,我们通过遍历数组跟root比较,如果比root大,记录这个位置i,从这个i到直到最后的元素跟root比较,如果还有比root小的元素,说明不符,返回false,然后递归,检测所有子树
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence==null||sequence.length<=0)
return false;
int root=sequence[sequence.length-1];
int i=0;
for(;i<sequence.length-1;i++){
if(sequence[i]>root){
break;
}
}
int j=i;
for(;j<sequence.length-1;j++){
if(sequence[j]<root)
return false;
}
boolean isLeft=true;
if(i>0){
isLeft=VerifySquenceOfBST(Arrays.copyOfRange(sequence,0,i));
}
boolean isRight=true;
if(i<sequence.length-1){
isRight=VerifySquenceOfBST(Arrays.copyOfRange(sequence,i,sequence.length-1));
}
return isLeft&&isRight;
}
}