题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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);}}
