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

二叉树构造:从前序、中序与后序遍历序列入手

目录

引言

从前序与中序遍历序列构造二叉树(题目 105)

解题思路

举例说明

从中序与后序遍历序列构造二叉树(题目 106)

解题思路

举例说明

总结


引言

二叉树的遍历与构造是算法领域中的经典问题。LeetCode 上的“从前序与中序遍历序列构造二叉树”(题目 105)和“从中序与后序遍历序列构造二叉树”(题目 106),能帮助我们深入理解二叉树的特性。通过剖析这两道题,我们可以掌握利用不同遍历序列构建二叉树结构的方法。

从前序与中序遍历序列构造二叉树(题目 105)

解题思路

先序遍历的顺序是“根 - 左 - 右”,这意味着先序遍历的第一个元素必定是二叉树的根节点。而中序遍历的顺序是“左 - 根 - 右” 。我们可以这样构建二叉树:

1. 首先,从先序遍历序列中取出第一个元素,它就是当前子树的根节点。

2. 然后,在中序遍历序列中找到这个根节点。以这个根节点为界,它左边的元素构成了左子树的中序遍历序列,右边的元素构成了右子树的中序遍历序列。

3. 接着,根据中序遍历中左子树元素的个数,我们可以在先序遍历序列中确定左子树的先序遍历序列(从先序遍历的第二个元素开始,长度为左子树元素个数),剩下的部分就是右子树的先序遍历序列。

4. 最后,通过递归的方式,分别对左子树和右子树的遍历序列重复上述步骤,不断构建出完整的二叉树。

举例说明

假设先序遍历序列为  [3, 9, 20, 15, 7]  ,中序遍历序列为  [9, 3, 15, 20, 7]  。先序遍历的第一个元素  3  是根节点。在中序遍历中找到  3  ,其左边的  [9]  是左子树中序遍历序列,右边的  [15, 20, 7]  是右子树中序遍历序列。左子树元素个数为  1  ,那么先序遍历中从第二个元素开始长度为  1  的  [9]  就是左子树先序遍历序列,剩下的  [20, 15, 7]  是右子树先序遍历序列。然后对左右子树的遍历序列递归操作,逐步构建二叉树。

从中序与后序遍历序列构造二叉树(题目 106)

解题思路

后序遍历的顺序是“左 - 右 - 根”,所以后序遍历的最后一个元素就是二叉树的根节点。结合中序遍历“左 - 根 - 右”的顺序,构建过程如下:

1. 取出后序遍历序列的最后一个元素,它是当前子树的根节点。

2. 在中序遍历序列里找到这个根节点。根节点左边的元素是左子树的中序遍历序列,右边的是右子树的中序遍历序列。

3. 根据中序遍历中左子树元素的数量,我们可以在后序遍历序列中确定左子树的后序遍历序列(从后序遍历序列起始位置开始,长度为左子树元素个数),右子树的后序遍历序列就是剩下的部分(不包含已经确定为根节点的那个元素) 。

4. 同样通过递归,对左子树和右子树的遍历序列进行上述操作,直至构造出整棵二叉树。

举例说明

若中序遍历序列是  [9, 3, 15, 20, 7]  ,后序遍历序列是  [9, 15, 7, 20, 3]  。后序遍历的最后一个元素  3  是根节点。在中序遍历中找到  3  ,其左边  [9]  为左子树中序遍历序列,右边  [15, 20, 7]  为右子树中序遍历序列。左子树元素个数为  1  ,后序遍历中从起始位置开始长度为  1  的  [9]  是左子树后序遍历序列,剩下的  [15, 7, 20]  是右子树后序遍历序列。后续对左右子树递归构建。

总结

这两道题都是利用不同遍历序列的特性,通过确定根节点,划分左右子树遍历序列,再递归构建的方式来解决。理解了这些思路,不仅能轻松应对二叉树构造相关题目,还能加深对二叉树遍历本质的认识,为解决更复杂的树结构问题打下基础。

相关文章:

  • Flink 作业提交流程
  • 数据库中关于查询选课问题的解法
  • JAVA SE 多线程(上)
  • C#中的成员常量:编译时的静态魔法
  • Elasticsearch进阶篇-DSL
  • 虚幻引擎5-Unreal Engine笔记之Pawn与胶囊体的关系
  • 项目:在线音乐播放服务器——基于SSM框架和mybatis
  • 宝塔面板屏蔽垃圾搜索引擎蜘蛛和扫描工具的办法
  • 互联网大厂Java面试场景:从简单到复杂的技术深度解析
  • redis读写一致问题
  • 《从零开始:Spring Cloud Eureka 配置与服务注册全流程》​
  • 记录一次win11本地部署deepseek的过程
  • 开发指南115-CSS中选择器关系
  • 接口——类比摄像
  • 31、魔法生物图鉴——React 19 Web Workers
  • Jmeter使用及压测
  • Bash fork 炸弹 —— :(){ :|: };:
  • Android studio Could not move temporary workspace
  • 扫描件交叉合并PDF免费软件 拖拽即合并 + 自动对齐页码 档案整合更轻松
  • 10.11 LangGraph多角色Agent开发实战:生产级AI系统架构与性能优化全解析
  • 以色列称“将立即允许恢复”人道主义物资进入加沙
  • 《缶翁的世界》首发:看吴昌硕等湖州籍书画家的影响
  • 三件珍贵标本开箱!中国恐龙大展5月26日在沪开幕,明星标本汇聚一堂
  • 《掩耳盗邻》:富人劫富,是犯罪,也是赎罪?
  • 北方首场高温将进入鼎盛阶段,江南华南多地需警惕降雨叠加致灾
  • 见微知沪|科学既要勇攀高峰,又要放低身段