美文网首页
二叉搜索树的后序遍历序列

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

作者: 小小的白菜 | 来源:发表于2018-10-08 20:39 被阅读0次

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

  • 确定root;
  • 遍历序列(除去root结点),找到第一个大于root的位置,则该位置左边为左子树,右边为右子树;
  • 遍历右子树,若发现有小于root的值,则直接返回false;
  • 分别判断左子树和右子树是否仍是二叉搜索树(即递归步骤1、2、3)。
  // 找住二叉查找树的特点:左子树<根<右子树  使用分治思想
  function VerifySquenceOfBST(sequence) {
    if (sequence.length === 0) return false
    if (sequence.length === 1) return true
    return judge(sequence, 0, sequence.length - 1)
  }

  function judge(arr, start, end) {
    if (start >= end) {
      return true
    }
    let i = start
    while (arr[i] < arr[end]) { // 左部分
      ++i
    }
    for (let j = i; j < end; j++) { // 右部分
      if (arr[j] < arr[end]) {
        return false
      }
    }
    return judge(arr, start, i - 1) && judge(arr, i, end - 1)
  }

相关文章

网友评论

      本文标题:二叉搜索树的后序遍历序列

      本文链接:https://www.haomeiwen.com/subject/artsaftx.html