剑指offer 23.二叉搜索树的后序遍历序列

23.二叉搜索树的后序遍历序列

题目

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

思路

二叉搜索树性质就是左子树小于根节点小于右节点,以最右侧为根,判断一下让数组左侧均小于根,根小于右侧,然后分成两块继续运算即可。
(我真的不知道为什么越界啊,我也不知道为什么突然就不越界了)

代码

    public boolean vt(int[] sequence, int start, int end) {
    if (start>=end) {
      return true;
    }
    int root = sequence[end];
    int mid = start;
    for (; mid < end; mid++) {
      if (root < sequence[mid]) {
        break;
      }
    }
    for (int i = mid; i < end; i++) {
      if (root > sequence[i]) {
        return false;
      }
    }
    boolean left = true;
    boolean right = true;
    if (start <= mid - 1) {
      left = vt(sequence, start, mid - 1);
    }
    if (mid <= end - 1) {
      right = vt(sequence, mid, end - 1);
    }
    return left && right;
  }

  public boolean VerifySquenceOfBST(int[] sequence) {
    if (sequence == null || sequence.length == 0) {
      return false;
    }
    if (sequence.length < 3) {
      return true;
    }
    return vt(sequence, 0, sequence.length - 1);
  }
原文地址:https://www.cnblogs.com/blogxjc/p/12384476.html