• 《剑指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);
    }
    
  • 相关阅读:
    Exercise 3: Numbers And Math
    Exercise 1: A Good First Program
    Lambda表达式详解
    @CacheEvict中的allEntries与beforeInvocation
    swagger接口文档查看地址
    开发常用软件下载
    mybatis中的<trim prefix="" suffix="" suffixOverrides="" prefixOverrides=""></trim>说明
    Git初使用
    vue.js的引用地址
    Git push代码到远程仓库
  • 原文地址:https://www.cnblogs.com/echovic/p/6489614.html
Copyright © 2020-2023  润新知