根据二叉搜索树的特点:左子树小于根节点 ,右子树大于根节点
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
//注意当数组为null或为空都为false
if(sequence == null || sequence.length == 0){
return false;
}
return VerifySquence(sequence,0,sequence.length - 1);
}
public boolean VerifySquence(int [] sequence,int start,int root) {
//递归的出口条件,当首元素和末尾元素位置齐了
if(start >= root){
return true;
}
int key = sequence[root];
int i = 0;
//寻找节点左边序列和右边序列的分界点
for(i = start;i < root;i++){
if(sequence[i] > key){
break;
}
}
//查看节点的右边序列是否还包含根节点
for(int j = i; j < root; j++){
if(sequence[j] < key){
return false;
}
}
//左右子树再递归
return VerifySquence(sequence,start,i - 1) && VerifySquence(sequence,i,root - 1);
}
}