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

目录

引言

从前序与中序遍历序列构造二叉树(题目 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]  是右子树后序遍历序列。后续对左右子树递归构建。

总结

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

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值