题目:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。返回 true 或者 false 。假设输入的数组任意两个数字都互不相同。
分析一:
由于后序遍历的最后一个节点是一棵树的根节点,而且,二叉搜索树是根节点的左子树的值小于根节点小于右子树的值。所以可以用递归的方式,重复一个过程。
代码一:
package offer.xzs.thirty2thirtynine.thirtythree;
public class Demo01 {
public static void main(String[] args) {
int[] arr = { 5, 6, 7, 9, 11, 10, 8 };
boolean judge = judge(arr);
System.out.println(judge);
}
public static boolean judge(int[] arr) {
if (arr == null || arr.length == 0) {
return false;
}
return judge(arr, 0, arr.length - 1);
}
public static boolean judge(int[] arr, int first, int last) {
if (last - first <= 1) {
return true;
}
int root = arr[last];
int cur = first;
while (cur < last && arr[cur] <= root) {
cur++;
}
for (int i = cur; i < last; i++) {
if (arr[i] < root) {
return false;
}
}
return judge(arr, first, cur - 1) && judge(arr, cur, last - 1);
}
}