题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解题思路
如果一个数组是一个二叉搜索树的后序遍历结果,那么这个数组有以下特征:数组的最后一个元素是(子)树的根节点,前面的部分可以分为两个部分,前一部分的元素都小于最后一个元素值,后一部分都大于数组最后一个元素值,我们首先需要找到这个临界值,在判断前一部分的元素是否都小于数组末尾的值,接着分别对数组前两部分处理。
代码实现
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if (sequence == null || sequence.length <= 0) {
return false;
}
return verifySequenceOfBST(sequence, 0, sequence.length - 1);
}
public static boolean verifySequenceOfBST(int[] sequence, int start, int end) {
if (start >= end) {
return true;
}
int index = start;
while (index < end - 1 && sequence[index] < sequence[end]) {
index++;
}
int right = index;
while (index < end - 1 && sequence[index] > sequence[end]) {
index++;
}
if (index != end - 1) {
return false;
}
index = right;
return verifySequenceOfBST(sequence, start, index - 1) && verifySequenceOfBST(sequence, index, end - 1);
}
}