输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
BST : binary serach tree 二叉查找树/二叉搜索树
注意:对于数组最初判断时,要这样判断:if (sequence == null || sequence.length == 0)
public class Test23 {
public boolean VerifySquenceOfBST(int[] sequence) {
if (sequence==null||sequence.length==0){
return false;
}
int start=0;
int end=sequence.length-1;
for (int i =0;i<end;i++){
if (sequence[i]<sequence[end]){
start++;
}
}
for (int i =start;i<end;i++){
if (sequence[i]<sequence[end]){
return false;
}
}
VerifySquenceOfBST(Arrays.copyOfRange(sequence,0,start));
VerifySquenceOfBST(Arrays.copyOfRange(sequence,start,end));
return true;
}
public boolean VerifySquenceOfBST2(int [] sequence) {
if(sequence.length==0){
return false;
}
return isTreeBST(sequence,0,sequence.length-1);
}
public boolean isTreeBST(int [] sequence,int start,int end){
if(start>=end){
return true;
}
int i=start;
while(i<end&&sequence[i]<sequence[end]){
i++;
}
int j=i;
while(j<end){
if(sequence[j]<sequence[end]){
return false;
}
j++;
}
return isTreeBST(sequence,start,i-1)&&isTreeBST(sequence,i,end-1);
}
}