输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence==null||sequence.length==0){
return false;
}
return verify(sequence, 0, sequence.length-1);
}
public boolean verify(int[] sequence,int start,int end){
System.out.println("进入程序"+start+" "+end);
if(start>=end){
return true;
}
int root=sequence[end];
//寻找左子树的边界
int i=start;
for(;i<end;i++){
System.out.println("i~"+i);
if(sequence[i]>root){
break;
}
}
System.out.println("for后i="+i);
//寻找右子树有没有小于根节点的节点
int j=i+1;
for(;j<end;j++){
if(sequence[j]<root){
return false;
}
}
boolean left=true;
System.out.println("进入if之前i="+i);
if(i>0){
System.out.println(start+" "+(i-1));
left=verify(sequence, start, i-1);
}
boolean right=verify(sequence, i, end-1);
return left&&right;
}
近期评论