题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence==null||sequence.length==0) return false;
else return BST(sequence);
}
public boolean BST(int [] sequence) {
if(sequence.length==1||sequence.length==2||sequence.length==0) return true;
int i=0,j=0,last=sequence[sequence.length-1];
while(i<=(sequence.length-1)&&sequence[i]<last) i++;
j=i;
while(i<=(sequence.length-1)&&sequence[i]>last) i++;
if(i!=sequence.length-1) return false;
int[] l=new int[j];
int[] r=new int[sequence.length-j-1];
copy(l,sequence,0,j);
copy(r,sequence,j,sequence.length-1);
return BST(l)&& BST(r);
}
public void copy(int[] ret,int[] left,int l,int r){
for(int i=l;i<r;i++)
ret[i-l]=left[i];
}
}