题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
public boolean VerifySquenceOfBST(int[] sequence) {
return getResult(sequence,sequence.length);
}
public boolean getResult(int[] sequence, int lenght) {
if (sequence == null || lenght <= 0) {
return false;
}
int root = sequence[lenght - 1];
int i= 0;
//在二叉搜索树中左子树的结点小于根结点
for (;i < lenght - 1;++i) {
if (sequence[i] > root) {
break;
}
}
int j =i;
//在二叉搜索树中右子树的结点大于根结点
for (;j<lenght-1;++j){
if (sequence[j] <root) {
return false;
}
}
//判断左子树是不是二叉搜索树
boolean left = true;
if (i>0) {
left = getResult(sequence,i);
}
//判断右子树是不是二叉搜索树
boolean right = true;
if (i < lenght -1) {
System.arraycopy(sequence,i,sequence,0,lenght-i);
right = getResult(sequence,lenght-i-1);
}
return (left && right);
}