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

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

    题目描述

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


    相关知识

    二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。

    思路

    1. 根据二叉搜索树的特点,序列的最后一个元素是根结点,其左子树全都比根结点小,右子树全都比根节点大。
    2. 将根结点前面的数组分为左右连个部分,左侧部分都小,右侧部分都大;
    3. 如果右侧部分有比根节点小的元素,那么就不是后序遍历,如此递归进行。

    实现代码

    function adjustSequence(sequence, start, end) {
        if (start >= end) {
            return true;
        }
        var i = end;
        while (i > start && sequence[i - 1] > sequence[end]) {
            --i;
        }
        for (var j = i - 1; j >= start; --j) {
            if (sequence[j] > sequence[end]) {
                return false;
            }
        }
        return adjustSequence(sequence, start, i - 1) && (adjustSequence(sequence, i, end - 1));
    }
    
    function VerifySquenceOfBST(sequence) {
        if (!sequence.length) {
            return false;
        }
        return adjustSequence(sequence, 0, sequence.length - 1);
    }
    
  • 相关阅读:
    bzoj 2784: [JLOI2012]时间流逝【树形期望dp】
    bzoj 3566: [SHOI2014]概率充电器【树形概率dp】
    bzoj 5277: [Usaco2018 Open]Out of Sorts【冒泡排序瞎搞】
    【04】在 PR 中关闭 issue
    【03】代码格式化+高亮
    【02】粘贴图像
    【01】在 Github 上编辑代码
    【02】GitHub 工具 Octotree
    【01】恶趣味玩转 GitHub commit 历史记录
    【07】Firebug监控网络情况
  • 原文地址:https://www.cnblogs.com/echovic/p/6489614.html
Copyright © 2011-2022 走看看