剑指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);
  }

声明:该文章系转载,转载该文章的目的在于更广泛的传递信息,并不代表本网站赞同其观点,文章内容仅供参考。

本站是一个个人学习和交流平台,网站上部分文章为网站管理员和网友从相关媒体转载而来,并不用于任何商业目的,内容为作者个人观点, 并不代表本网站赞同其观点和对其真实性负责。

我们已经尽可能的对作者和来源进行了通告,但是可能由于能力有限或疏忽,导致作者和来源有误,亦可能您并不期望您的作品在我们的网站上发布。我们为这些问题向您致歉,如果您在我站上发现此类问题,请及时联系我们,我们将根据您的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。