//输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。
//
//
//
// 参考以下这颗二叉搜索树:
//
// 5
// / \
// 2 6
// / \
// 1 3
//
// 示例 1:
//
// 输入: [1,6,3,2,5]
//输出: false
//
// 示例 2:
//
// 输入: [1,3,2,6,5]
//输出: true
//
//
//
// 提示:
//
//
// 数组长度 <= 1000
//
// 👍 209 👎 0
class Solution { public boolean verifyPostorder(int[] postorder) { if (postorder == null) { return false; } return doCheck(postorder, 0, postorder.length - 1); } private boolean doCheck(int[] postOrder, int start, int end) { if (start >= end) { return true; } int rootVal = postOrder[end]; // leftEnd实际为右子树开始位置 int leftEnd = start; for (; postOrder[leftEnd] < rootVal && leftEnd < end;) { if (postOrder[leftEnd] < rootVal) { leftEnd++; } } // 右子树 for (int i = leftEnd; i < end; i++) { if (postOrder[i] <= rootVal) { return false; } } return doCheck(postOrder, start, leftEnd - 1) && doCheck(postOrder, leftEnd, end - 1); } }