剑指Offer28--面试题33. 二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。
代码
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
int length = sequence.length;
if(sequence==null || length<=0){
return false;
}
return help(sequence, length);
}
static boolean help(int[] sequence,int length){
// 根据二叉搜索树的性质和后续遍历的特点,
// 最后一个节点是根节点,而左右子树分成两个部分
int root = sequence[length-1];
int[] leftArray =new int[length];
int[] rightArray =new int[length];
int i=0;
for(i=0;i<length-1;i++){
//找到根节点的左子树部分
if(sequence[i]>root) break;
leftArray[i] = sequence[i];
}
int j = i;
int k=0;
for(j=i;j<length-1;j++){
//找到根节点的右子树部分
if(sequence[j]<root) return false;
rightArray[k] = sequence[j];
k++;
}
boolean left = true;
if(i>0){
left = help(leftArray,i);
}
boolean right = true;
if(i<length-1){
right = help(rightArray,length-i-1);
}
return left&&right;
}
}