题目:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
源码:
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if (sequence.length == 0) {
return false;
}
if (sequence.length == 1) {
return true;
}
return helper(sequence, 0, sequence.length - 1);
}
public boolean helper(int[] arr, int start, int end) {
// 表面递归完成,都没有出现 false 情况,符合搜索树的要求
if (start >= end) {
return true;
}
// while 循环是从根end往前找到比根end小的元素为止
int i = end;
while (i > start && arr[i - 1] > arr[end]) {
i--;
}
// 这里结束时:i-1就是从右往左找的第一个比根end小的元素
// for 循环是从左start开始到i-1为止,判断是否符合左子树比根结点小的情况
for (int j = start; j < i - 1; j++) {
if (arr[j] > arr[end]) {
return false;
}
}
// 进行递归判断
return helper(arr, start, i - 1) && helper(arr, i, end - 1);
}
}