二叉搜索树的后序遍历序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
如果是则返回true,否则返回false。
假设输入的数组的任意两个数字都互不相同。
样例
输入:[4, 8, 6, 12, 16, 14, 10]
输出:true
递归
时间复杂度O(n)
class Solution {
public boolean verifySequenceOfBST(int [] sequence) {
if(sequence == null){
return false;
}
if(sequence.length == 0){
return true;
}
int length = sequence.length;
int root = sequence[length-1];
int i = 0;
for(;i < length - 1;i++){
if(sequence[i] > root){
break;
}
}
int[] left = new int[i];
for(int k = 0;k < i;k++){
left[k]=sequence[k];
}
int j = i;
for(;j < length-1;j++){
if(sequence[j] < root){
return false;
}
}
int[] right = new int[j-i];
for(int k = 0;k < j-i;k++){
right[k]=sequence[i+k];
}
boolean left_bool = true;
if(i > 0){
left_bool=verifySequenceOfBST(left);
}
boolean right_bool = true;
if(j > 0){
right_bool=verifySequenceOfBST(right);
}
return left_bool&&right_bool;
}
}