美文网首页程序员让前端飞
《剑指offer》— JavaScript(23)二叉搜索树的后

《剑指offer》— JavaScript(23)二叉搜索树的后

作者: echoVic | 来源:发表于2017-03-02 11:19 被阅读0次

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

    题目描述

    输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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);
    }
    

    相关文章

      网友评论

        本文标题:《剑指offer》— JavaScript(23)二叉搜索树的后

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