数据结构(十二)二叉树—— 二叉树的逆推构建

根据遍历序列逆推二叉树结构
博客介绍经典二叉树问题中,给定深度优先遍历序列三种顺序中的两种,反推二叉树结构的方法。强调只有包含中序遍历序列才能唯一确定二叉树结构,详细阐述先序+中序、后序+中序的逆推步骤,还解释了先序和后序序列不能唯一确定结构的原因。

在经典二叉树问题中,还有一类题目,那就是给定深度优先遍历序列三种顺序中的两种,反推一棵二叉树的结构图。实际上这种问题具有很强的技巧性,只要我们记住这一技巧,就能够很容易的推断出整个二叉树的结构。
请记住如下规律:中序定左右,树根看先后
但是需要注意的是:在给定的深度优先遍历序列的两种序列中,只有包含中序遍历序列的情况下,才能唯一确定一个二叉树的结构

1、先序序列+中序序列的逆推过程

通过先序序列和中序序列逆推二叉树的步骤如下:

  • 步骤1:在先序序列中最先出现的节点就是整个二叉树的根节点;
  • 步骤2:在中序序列中找到根节点的位置,根节点左边的所有节点就是树根左子树的构成,根节点右边的所有节点就是树根右子树 的构成;
  • 步骤3:使用中序序列的左子树部分,在先序序列中进行查找,在先序序列中最先出现的节点就是左子树的树根;
  • 步骤4:使用中序序列的右子树部分,在先序序列中进行查找,在先序序列中最先出现的节点就是右子树的树根;
  • 步骤5:确定左右子树的树根节点之后,重复步骤1-­5,直到先序序列和中序序列中的所有元素全部使用过为止,二叉树构建完成。

通过先序序列和中序序列构建二叉树过程如图所示:

2、后序序列+中序序列的逆推过程

通过后序序列和中序序列逆推二叉树结构的方式和前面的通过先序序列和中序序列逆推二叉树结构的过程基本相似,只是现在确定子树树根节点的方式变成了:在后序序列中,最后出现的节点才是整个二叉树或者左右子树的树根节点。
通过后序序列和中序序列逆推二叉树的步骤如下:

  • 步骤1:在后序序列中最后出现的节点是整个二叉树结构的根节点
  • 步骤2:在中序序列中找到根节点的位置,根节点左边的所有节点就是树根左子树的构成,根节点右边的所有节点就是树根右子树的构成
  • 步骤3:使用中序序列的左子树部分,在后序序列中进行查找,在后序序列中最后出现的节点就是左子树的树根
  • 步骤4:使用中序序列的右子树部分,在后序序列中进行查找,在后序序列中最后出现的节点就是右子树的树根
  • 在确定左右子树的树根节点之后,重复上述步骤1-­5,直到后序序列和中序序列中的所有元素全部使用过为止,二叉树构建完成

通过后序序列和中序序列构建二叉树过程如图所示:

3、二叉树的镜像对称问题

为什么说在之给定先序序列和后序序列的情况下不能够唯一确定一个二叉树的结构呢?下面我们先来观察如下的两个二叉树结构,并对这两个二叉树结构分别推断先序、中序、后序遍历序列:

从上图中我们不难看出,两个二叉树的结构是不同的,但是两个二叉树的先序序列和后序序列是完全相同的,只有中序序列不同
我们称图中两个二叉树结构下BD两个节点的结构为镜像对称。所以,如果在两个二叉树结构中存在这种进行对称的结构,是不能够通过先序序列和后序序列进行区分的,只能够再通过一个中序序列加以区分。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

傲骄鹿先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值