当前位置: 首页 > news >正文

力扣面试150(62/150)

8.21 106. 从中序与后序遍历序列构造二叉树

给定两个整数数组 inorderpostorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树

我的思路:在上一道题目的启发下,我也是根据中序和后序的规律找到了根节点,并找到左右子树的数字,通过递归生成左右子树,最后构建。

我的代码:

var buildTree = function(inorder, postorder) {const len = postorder.length;if(len === 0) return null;let root = postorder[len- 1];let index = inorder.indexOf(root);let in1 = inorder.slice(0 , index); let in2 = inorder.slice(index + 1 , len); let post1 = postorder.slice(0 , in1.length);let post2 = postorder.slice(in1.length , len - 1);const left = buildTree(in1 , post1);const right = buildTree(in2 , post2);return new TreeNode(root , left , right);
};

总结:

它根据中序和后序遍历的结果正确地构建出二叉树。其核心思想是利用后序遍历的最后一个元素作为当前子树的根节点,然后在中序遍历中找到这个根节点的位置,从而将中序遍历序列划分为左子树和右子树。接着,根据左子树的长度,将后序遍历序列也相应地划分为左子树和右子树的后序遍历部分。最后,通过递归调用这个函数来构建左子树和右子树,并将它们连接到根节点上。你之前遇到的栈溢出错误,是因为在分割数组时错误地将根节点包含在了子数组中,导致递归无法终止。而当前版本的代码已经修正了这个问题,通过 slice(index + 1, len) 和 slice(0, index) 正确地排除了根节点,确保了每次递归处理的子树规模都在不断缩小,最终能够顺利构建出整棵树。

http://www.dtcms.com/a/343087.html

相关文章:

  • SAP FIORI Elements深度定制:注解扩展与审批流程增强完全指南
  • 软件工程 + AI 不是 “硬凑”,3 步走通落地关键环节
  • es6新语法
  • LLaVA-3D,Video-3D LLM,VG-LLM,SPAR论文解读
  • MySQL 时间筛选避坑指南:为什么格式化字符串比较会出错?
  • LMAD:用于可解释自动驾驶的集成端到端视觉-语言模型
  • 自动驾驶架构:人为接口与隐式特征的博弈
  • 杰里708n tws api 简介
  • K-Means 聚类算法详解与实战指南
  • QPS 每秒查询数
  • openEuler系统中如何将docker安装在指定目录
  • Qt5网络编程详细讲解
  • 僵尸进程和孤儿进程
  • Spring相关知识
  • 解决接口耗时长问题
  • 软考 系统架构设计师系列知识点之杂项集萃(130)
  • 上证50股指期货为何波动很小?
  • AP状态管理中提到的两种“业务逻辑”
  • 34、扩展仓储管理系统 (跨境汽车零部件模拟) - /物流与仓储组件/extended-warehouse-management
  • 家用电器,让现代家庭生活更美好
  • 华为云ModelArts+Dify AI:双剑合璧使能AI应用敏捷开发
  • 红日靶场5
  • 有鹿机器人:智慧清洁新时代的引领者
  • 今天,字节开源Seed-OSS-36B模型,512k上下文
  • es6常用方法来解决功能需求
  • 【LeetCode题解】LeetCode 240. 搜索二维矩阵 II
  • 2025图表制作完全指南:设计规范、工具选型与行业案例
  • sqli-labs通关笔记-第60关 GET字符型报错注入(双引号括号闭合 限制5次探测机会)
  • 打开或者安装Navicat时出现Missing required library libcurl.dll,126报错解决方法(libmysql_e.dll等)
  • Google Chrome V8 <14.1.58 越界写入漏洞