剑指Offer——二叉搜索树的后序遍历序列(JS实现)

简介: 剑指Offer——二叉搜索树的后序遍历序列(JS实现)

题目描述

image.png

解题思路

  • 本题关键点在于:二叉搜索树的后序遍历序列的最后一个元素是根节点,左子树均小于根节点,右子树均大于根节点
  • 使用递归是本题的解题方法
  • 本题需要额外考虑的情况在于有的序列是没有右子树的,如果没有右子树,那么分割左右子树的位置就是根节点所在的位置,默认右子树是一个空数组

解题代码

var verifyPostorder = function(postorder) {
    // !本题的解题关键:二叉搜索树的后序遍历,最后一个元素是根节点
    // 如果输入的数组长度小于2,则返回true
    let len = postorder.length;
    if (len < 2) return true;
    // 区分左右子树 
    let flag = 0;
    // 找到根节点
    let root = postorder[len-1];
    for (let i = 0; i < postorder.length;i++) {
        if (postorder[i] > postorder[len-1]) {
            flag = i;
            break;
        }
        if (i === len-1) {
            flag = i;
        }
    }
    // 左子树
    let leftTree = postorder.slice(0,flag);
    // 右子树
    let rightTree = postorder.slice(flag,len-1);
    // 如果右子树的每一个节点都大于根节点,则继续递归判断,反之为false
    if (rightTree.every((value) => value > root)) {
        return verifyPostorder(leftTree) && verifyPostorder(rightTree);
    } else {
        return false;
    }
};

总结(本题给我们的启示思路)

  • 启示一:学会使用递归求解
  • 启示二:知道二叉搜索树的后序遍历序列的最后一个节点是根节点
  • 启示三:知道没有右子树的序列,按照空数组来进行处理
相关文章
|
4月前
|
JavaScript 前端开发 索引
js遍历的方法与区别
js遍历的方法与区别
65 3
|
3月前
|
存储 JSON JavaScript
「offer来了」保姆级巩固你的js知识体系(4.0w字)
该文章提供了JavaScript知识体系的全面复习资料,覆盖了从基础语法到高级特性如闭包、原型链、异步编程等多个方面,并通过大量的面试题和实例代码帮助巩固理解。
「offer来了」保姆级巩固你的js知识体系(4.0w字)
|
3月前
|
JavaScript 前端开发
JavaScript基础知识-数组的遍历
关于JavaScript数组遍历基础知识的文章。
41 2
JavaScript基础知识-数组的遍历
|
3月前
|
JavaScript 前端开发
JavaScript写的序列代码生成器
JavaScript写的序列代码生成器
|
2月前
|
JavaScript
js之遍历方法
js之遍历方法
13 0
|
4月前
|
JavaScript 前端开发
JavaScript基础&实战(5)js中的数组、forEach遍历、Date对象、Math、String对象
这篇文章介绍了JavaScript中的数组、Date对象、Math对象以及包装类(String、Number、Boolean),并详细讲解了数组的创建、方法(如forEach、push、pop、unshift、slice、splice)和遍历操作,以及工厂方法创建对象和原型对象的概念。
JavaScript基础&实战(5)js中的数组、forEach遍历、Date对象、Math、String对象
|
4月前
|
机器学习/深度学习 JavaScript
node.js实现遍历所有文件夹里面的js文件,提取所有的url
node.js实现遍历所有文件夹里面的js文件,提取所有的url
|
4月前
|
JavaScript
js之遍历方法
js之遍历方法
40 0
|
5月前
|
JavaScript API
js【最佳实践】遍历数组的八种方法(含数组遍历 API 的对比)for,forEach,for of,map,filter,reduce,every,some
js【最佳实践】遍历数组的八种方法(含数组遍历 API 的对比)for,forEach,for of,map,filter,reduce,every,some
90 1
|
5月前
|
算法 JavaScript
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)
78 0
JS 【详解】树的遍历(含深度优先遍历和广度优先遍历的算法实现)