


解题思路:
分治

public class Solution {
    // 验证给定的后序遍历数组是否可以来自一个二叉搜索树(BST)
    public boolean verifyTreeOrder(int[] postorder) {
        // 调用递归方法来验证整个postorder数组
        return verify(postorder, 0, postorder.length - 1);
    }
    // 递归方法,用于验证数组的一部分是否可以是BST的后序遍历
    boolean verify(int[] postorder, int left_start, int rootIndex) {
        // 递归结束条件:如果当前部分为空或只有一个节点,它是有效的
        if (left_start >= rootIndex)
            return true;
        // 初始化一个指针来遍历数组
        int p = left_start;
        // 寻找左子树的结束点,左子树所有节点的值都要小于根节点
        while (postorder[p] < postorder[rootIndex])
            p++;
        // 记录右子树开始的位置
        int right_start = p;
        // 继续移动指针,检查右子树中的节点是否都大于根节点
        while (postorder[p] > postorder[rootIndex])
            p++;
        // 验证我们是否达到了子数组的末尾
        // 并且递归验证左、右子树
        return p == rootIndex && verify(postorder, left_start, right_start - 1) &&
                verify(postorder, right_start, rootIndex - 1);
    }
}


















