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

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

作者: 小小的白菜 | 来源:发表于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