题目
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数组都互不相同。
解
package Chapter4;
public class VertifySquenceOfBST {
boolean vertifySquenceOfBST(int[] sequence,int start,int end){
if(sequence==null||start>end){
return false;
}
int root=sequence[end];
//在二叉搜索树中左子数的结点小于根结点
int i=start;
for(;i<=end-1;i++){
if(sequence[i]>root)
break;
}
//在二叉搜索树中右子树的结点大于根结点
int j=i;
for(;j<=end-1;j++){
if(sequence[j]<root){
return false;
}
}
//判断左子树是不是二叉搜索树
boolean left=true;
if(start<i-1)
left=vertifySquenceOfBST(sequence,start,i-1);
//判断右子树是不是二叉搜索树
boolean right=true;
if(i<end-1)
right=vertifySquenceOfBST(sequence,i,end-1);
return (left && right);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
VertifySquenceOfBST vS=new VertifySquenceOfBST();
int[] sequence={5,7,6,9,11,10,8};
int[] sequence2={7,4,6,5};
System.out.println("sequence :"+vS.vertifySquenceOfBST(sequence, 0,sequence.length-1));
System.out.println("sequence2 :"+vS.vertifySquenceOfBST(sequence2, 0,sequence2.length-1));
}
}