https://www.nowcoder.com/practice/a861533d45854474ac791d90e447bafd
好难哦😥

递归

  • 首先是二叉搜索树(左子树每个节点的值 < 该节点的值 < 右子树每个节点的值)的特点;
  • 其次是后序遍历(对于树中的任意节点来说,先打印它的左子树,然后再打印它的右子树,最后打印这个节点本身)的特点。 ```java public static boolean VerifySquenceOfBST(int[] sequence) { //先判断数组是否为空 if (sequence.length == 0)

    1. return false;

    int len_s = sequence.length; int root = sequence[len_s - 1]; //根节点 int index = 0; for (int i = 0; i < len_s; i++) {

    1. if (sequence[i] >= root) {
    2. index = i; //得到划分左右子树的索引位
    3. break;
    4. }

    } // 这里再验证如果从索引位往后的节点对应值是小于根节点的,就不符合二叉搜索树概念,返回False for (int j = index; j < len_s; j++) {

    1. if (sequence[j] < root) {
    2. return false;
    3. }

    }

    //接下来还需要再分别判断剩余左子树、右子树是否为二叉搜索树 //假设左子树为二叉搜索树,那么调用上面的函数就会得到如下数据: boolean left = true; if (index > 0) {

    1. left = VerifySquenceOfBST(Arrays.copyOfRange(sequence, 0, index));

    }

    //同理右子树 boolean right = true; if (index < len_s - 1) {

    1. right = VerifySquenceOfBST(Arrays.copyOfRange(sequence, index, len_s - 1));

    }

    return left && right; }

```