问题描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
二叉搜索树特点:对任意一个结点,其值大于左子树所有结点的值,小于右子树所有结点的值。注:剑指offer认为空树返回false
java程序如下:
import java.util.Arrays;
public class Solution13 {
public boolean VerifySquenceOfBST(int [] sequence) {
int len = sequence.length;
boolean res = m(sequence,len);
return res;
}
public boolean m(int[] sequence,int len){
if(sequence==null||len<=0){
return false;
}
int root = sequence[len-1];
int index=0;
while(sequence[index]<root){ //左子树中结点的值小于根节点的值
index++;
}
for(int i=index+1;i<len;i++){ //右子树中结点的值大于根节点的值
if(sequence[i]<root){
return false;
}
}
boolean left=true;
if(index>0){
left=m(sequence,index);
}
boolean right=true;
if((index+1)<len){
right=m(Arrays.copyOfRange(sequence,index,sequence.length),len-1-index);
}
return left&&right;
}
public static void main(String[] args){
int [] a={7,4,6,5};
Solution13 s = new Solution13();
boolean res=s.VerifySquenceOfBST(a);
System.out.println(res);
}
}
程序中用到了递归以及Arrays类的方法。