分析:根据搜索二叉树的性质,左子树节点小于根节点的值,右子树节点的值大于根节点的值。
public class Solution {
int root=0;
int index=0;
int max=0;
int min=0;
int count=0;
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence==null){
return false;
}
if(sequence.length ==1){
//只有一个节点
return true;
}
if(sequence.length ==0){
//{}
return false;
}
root=sequence[sequence.length-1];//找到根节点
for(int i=0;i<sequence.length-1;i++){
if(sequence[i] > root){
index=i-1;//找到左子树的最后一个节点的位置
if(i==0){
//只有右子树
for(int k=0;k<sequence.length-1;k++){
if((sequence[k] < root)){
return false;
}
}
return true;
}
break;
}
if(max < sequence[i]){
//找出左子树的最大值
max=sequence[i];
}
count++;
}
if(count == sequence.length-1){
//只有左子树
return true;
}else{
min=sequence[index+1];
for(int j=index+1;j<sequence.length-1;j++){
if(sequence[j] < root){
//确保右子树中所有节点的值都大于根节点的值
return false;
}
if(min > sequence[j]){
//找出右子树中的最小值
min=sequence[j];
}
}
}
//判断左子树的最大值与右子树的最小值的大小
if(min > max){
return true;
}
return false;
}
}