二叉搜索树的后序遍历序列
题目:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
如果是则返回true,否则返回false。
假设输入的数组的任意两个数字都互不相同。
样例:
输入:[4, 8, 6, 12, 16, 14, 10]
输出:true
方法:递归
后序遍历,数组的最后一个值是二叉树的根节点
所以前面的值一部分小于根节点,一部分大于根节点,因为是二叉搜索树
找到比根节点小的,则为左子树
比根节点大的为右子树
然后递归整个数组就可以了
public boolean verifySequenceOfBST(int [] sequence) {
if (sequence==null)return true;
if(sequence.length==0) return true;
int node=sequence[sequence.length-1];
int i=0;
for (i = 0; i < sequence.length-1; i++) {
if (sequence[i]>node)break;
}
int[] left=new int[i];
for (int i1 = 0; i1 < left.length; i1++) {
left[i1]=sequence[i1];
}
int j=i;
for (; j < sequence.length-1; j++) {
if (sequence[j]<node) return false;
}
int[] right=new int[j-i];
for (int i1 = 0; i1 < right.length; i1++) {
right[i1]=sequence[i1+i];
}
boolean left_bool = verifySequenceOfBST(left);
boolean right_bool = verifySequenceOfBST(right);
return left_bool&&right_bool;
}