zoukankan      html  css  js  c++  java
  • 剑指offer(23)二叉搜索树的后序遍历序列

    题目描述

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

    题目分析

    1.后续遍历我们可以知道,最右边的是根节点r。

    2.通过根节点r我们可以判断左子树和右子树。

    3.判断左子树中的每个值是否小于r,右子树的每个值是否大于r.

    4.对左、右子树递归判断。

    当然我们也可以不用递归,用循环来做,不过需要更高的技巧。

    代码

    递归版本:

    // 递归版
    function VerifySquenceOfBST(sequence) {
      if (!sequence.length) return false;
      return judge(sequence, 0, sequence.length - 1);
    }
    function judge(a, l, r) {
      if (l >= r) return true;
      let i = r;
      while (a[i - 1] > a[r] && i > l) i--;
      for (let j = i - 1; j >= l; j--) {
        if (a[j] > a[r]) return false;
      }
      return judge(a, l, i - 1) && judge(a, i, r - 1);
    }

    非递归版本

    // 非递归版
    function VerifySquenceOfBST2(sequence) {
      let n = sequence.length,
        i = 0;
      if (!n) return false;
      while (n--) {
        while (sequence[i] < sequence[n]) i++;
        while (sequence[i] > sequence[n]) i++;
        if (i < n) return false;
        i = 0;
      }
      return true;
    }
  • 相关阅读:
    poj3372 Candy Distribution
    poj3270 Cow Sorting
    poj2888 Magic Bracelet
    poj2429 GCD & LCM Inverse
    poj1811 Prime Test
    poj2689 Prime Distance
    【思维】2017多校训练七 HDU6121 Build a tree
    【字符串+BFS】Problem 7. James Bond
    【dfs】codeforces Journey
    【思维+贪心】codeforces Game of the Rows
  • 原文地址:https://www.cnblogs.com/wuguanglin/p/VerifySquenceOfBST.html
Copyright © 2011-2022 走看看