数据结构-二叉树:给出前中后其中两种遍历顺序,如何求第三种?超详细解析

🌵后序遍历
  • 遍历子树
  • 遍历子树
  • 操作节点

最后我们结合图片看一下后序遍历的顺序。

在这里插入图片描述

后序遍历的顺序是:HDEBIFGCA

知二求一

===================================================================

🌳当了解以上这三种遍历方式后,就会发现其实他们之间就只有细微的差别而已,我作图是深感体会的,前面两张的箭头线条我没有更改,仅仅只是更改了些文字而已,后序遍历稍有不同,因为要回到起点就会多两个箭头,不仅如此,后面两种遍历方式的排版我也是直接从复制前序遍历的,只需要改一两处就好了。

前中求后

🍀已知一棵二叉树的前序遍历序列为 ABCDEF 中序遍历序列为 CBAEDF ,请问这棵二叉树的后序遍历结果是多少?

🌱第一步,找根节点。根据前序遍历的性质可知,首先访问的就是根节点。因为前序遍历序列第一个元素是A,因此,A是这棵树的根节点。

在这里插入图片描述

🌱第二步,划分左右子树。我们已经知道了哪个是根节点,结合题目给出的中序序列可知CB在A的左边,EDF在A的右边,那么可以将将他们划分开。

在这里插入图片描述

🌱第三步,循环执行1、2步骤。我们回顾一下题目“前序遍历序列为 ABCDEF 中序遍历序列为 CBAEDF”。先看前序序列,A接着是B,那么B就是这棵左子树的根节点,然后看中序序列,那么B左边的元素就是B的左子树(仅有C),B右边A左边的元素就是B的右子树(无),因为数据较少,所以现在已经得出答案了,因此A的左子树的结构是这样的。

在这里插入图片描述

接着看A的右子树。在前序序列 ABCDEF中BC已经选完了,所以D就是A的右子树根节点。然后看中序序列CBAEDF,以D为根节点划分左右子树。所以D的左子树是E,右子树是F。因此,根据前序中序遍历得出的二叉树是这样的。(你以为这就结束了吗?没有,还要检查❗️❗️)

在这里插入图片描述

🎯既然已经知道了二叉树的结构,我们就能得出后序遍历的顺序了,是:CBEFDA

📌📌看完以上思路你是否能得出什么技巧?没错,可以知道,前序序列是用来找子树根节点的,中序序列是用来划分左右子树的。

📝📝我们做一道练习题巩固一下。

在这里插入图片描述

老样子找根节点,容易知道根节点是F,接着看中序遍历划分F的左右子树

在这里插入图片描述

看前序序列选左子树的根节点,F接着是B,所以B是F的左子树根节点。然后看中序序列划分B的左右子树,B的左子树是A,右子树是DCE,然后看前序序列,FBA都选过了,接着就是C,所以C是B右子树的根节点,重复上面步骤,可以得出F的左子树结构是:

在这里插入图片描述

接着看F的右子树,在先序遍历中其他元素已经确定了,G在H的前面,因此,F的右子树的根节点是G,接着看中序序列H在G的右边,因此H是G的右子树。那么完整的二叉树结构是:

在这里插入图片描述

🎯🎯最后,根据该结构可以知道后序遍历的顺序是:ADECBHGF。

后中求前

🍀已知二叉树的中序序列是 ABCDEFG ,后序序列是 BDCAFGE ,问前序序列是多少?

⭐️⭐️ 同样的,第一步找根节点,第二步划分左右子树,第三步,重复上面1、2步骤。 因为划分左右子树都是根据中序序列划分的,因此方法还是与 前中求后 中的划分方法一致,不同的是找根节点的方法,这里是在后序序列中找的。我们知道,在后序序列中,每棵树的根节点总是最后出现的,所以我们可以以此为突破点作为确定根节点的方法。

⛳️ 好,回到题目,因为在后序序列中根节点总是最后出现的,因此,E是根节点。确定了根节点后,接着就是划分左右子树了。在中序序列中,ABCD位于E的左侧,FG位于E的右侧,那么二叉树的大致形状是这样的。

在这里插入图片描述

⛳️ 继续找根节点,先从E的左子树开始,看后序序列“BDCAFGE”,E的左子树有ABCD四个元素,而这四个元素中A元素最后出现的,因此就是A就是E左子树的根节点。选完根节点后就要划分子树,看中序序列,BCD全在A的右侧。然后在BCD中选择根节点,看后序序列,C在BCD中最后出现,因此C是A的右子树节点,最后看中序序列可以知道BD分别位于C的左侧跟右侧,那么E的左子树结构是这样的。

在这里插入图片描述

⛳️ 现在我们看一下E的右子树,其实左子树已经出来了的话,右子树很容易判断了,因为还有GF两个节点。老规矩,先找出右子树的根节点,看后序序列,G在F的后面,因此,G应该是E的右子树根节点,最后最后,看中序序列,F在G的左侧,因此完整的的二叉树结构是这样的。

在这里插入图片描述

⛳️ 接着干啥?检查。检查发现好像没有什么问题,那么我们就能根据该二叉树结构得出前序序列了。前序序列应该是EACBDGF。

📝清楚了求解过程之后当然就要巩固啦!这里我给出一道练习题和答案大家课下练习哈,熟能生巧呀,我这里就不一一演示咯。😁😁

📝eg:已知二叉树的中序遍历顺序为DBAGEHCF,后序遍历顺序为DBGHEFCA,求该二叉树的前序遍历。 答案:ABDCEGHF

前后求中

🍀我们已经知道了前面两种求法,现在来看一下第三种。

📝 已知前序序列ABC与后序序列CBA,求中序序列。

💨我们想想这题该怎么求?可能有同学会说,出这么简单的题,不用想也求得出来吧,随便画两下就有了!那确实也对呀,我们现在就画画吧。

在这里插入图片描述

✌️我们就先画两种,其实应该不止两种的,这两种结构的二叉树前序和后序都一样都是前:ABC,后:CBA。我们知道,二叉树是讲究顺序的,顺序不同,表示的二叉树也就不同。因此,我们无法通过先序与后序序列来求解中序序列。

结论

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值