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);
    }
    
  • 相关阅读:
    jquery 表单清空
    CK-Editor content.replace
    CSS DIV HOVER
    返回上一页并刷新与返回上一页不刷新代码
    Google Java编程风格指南中文版
    编程常见英语词汇
    教你如何删除tomcat服务器的stdout.log文件
    @Autowired @Resource @Qualifier的区别
    JSTL标签,EL表达式,OGNL表达式,struts2标签 汇总
    4.11 application未注入报错解决
  • 原文地址:https://www.cnblogs.com/echovic/p/6489614.html
Copyright © 2011-2022 走看看