首页 > 编程知识 正文

完全二叉树的先序遍历,二叉树的先序遍历和后序遍历相反

时间:2023-05-04 03:24:58 阅读:276866 作者:4473

二叉树遍历基础概念分析: 遍历:编写程序时,读取二叉树中内容的顺序(本人理解为此)。先序/中序/后序:二叉树的先序,中序,后序中的“先中后”是相对于“根”而言的,意思是在什么时候遍历根节点。遍历规律:中序遍历来确定一个元素的左边有哪些元素、右边有哪些元素(确定大体的位置);后序/先序遍历来确定哪个元素在左,哪个元素在右(确定最终的位置)。

下面以自己画的一个二叉树为例,来说明一下各种遍历方法。

先序遍历

访问根节点;先序遍历左子树;先序遍历右子树(ABDGHECFI)

中序遍历

中序遍历左子树;访问根节点;中序遍历右子树(GDHBEACIF)

后序遍历

后序遍历左子树;后序遍历右子树;访问根节点(GHDEBIFCA)

(本来想着给大家再写一下这些遍历的代码实现。最近一直没有在学习,所以给大家推荐一篇大神的文章,里面递归实现和堆栈实现都有些,写的也挺详细的。大家自行参考哦!二叉树遍历方式代码实现)

如何通过两个遍历方式来计算第三个遍历方式?

首先必须要知道中序遍历,这样才能通过先序或者后序遍历来判断根的左右子树,从而逐个的判断出每个数所在的位置。
**举个栗子(搞错了,For example):**已知一个二叉树的先序遍历序列(ABDGHECFI)和中序遍历序列(GDHBEACIF),求该二叉树的后序遍历?
解答:

- 首先通过先序遍历序列确定序列(GDHBEACIF)根节点为A;其次通过中序遍历序列得出A节点左边(左子树以及其下的子树)为GDHBE,右边为CIF。 - 再首先通过先序遍历序列确定序列(GDHBE)根节点为B,确定序列(CIF)根节点为C;再其次通过中序遍历序列得出B节点左边为GDH,右边为E(即为B的右子树)、得出C节点左边为没有,右边为E(即为B的右子树)。 - 再再首先通过先序遍历序列确定 序列(GDH)根节点为D;再再其次通过中序遍历序列得出D节点的左边为G(即为左子树),右边为H(即为右子树)。

最后就得出了这个二叉树的真实排布方式,从而可以简单的写出它的后续遍历序列。是不是被我的文字所折服——“首先~ 其次~ 。 再首先~ 再其次~ ”。其实后面的“再首先~ 再其次~”都和前面的“首先 其次”中讲的方法都是一样的。便于大家观察理解,我画一个草图吧。最终可以轻松计算其后续遍历序列为:GHDEBIFCA

(条件有限,大家就这样看吧,应该能看清楚。摸摸哒)

("自己做的每一次决定,都请你不要后悔。生活本就是未知的,为何不放手一搏呢? FIGHTING…")

一分快三大小单双位技巧准确率99序或者后序遍历来判断根的左右子树,从而逐个的判断出每个数所在的位置。
**举个栗子(搞错了,For example):**已知一个二叉树的先序遍历序列(ABDGHECFI)和中序遍历序列(GDHBEACIF),求该二叉树的后序遍历?
解答:

- 首先通过先序遍历序列确定序列(GDHBEACIF)根节点为A;其次通过中序遍历序列得出A节点左边(左子树以及其下的子树)为GDHBE,右边为CIF。 - 再首先通过先序遍历序列确定序列(GDHBE)根节点为B,确定序列(CIF)根节点为C;再其次通过中序遍历序列得出B节点左边为GDH,右边为E(即为B的右子树)、得出C节点左边为没有,右边为E(即为B的右子树)。 - 再再首先通过先序遍历序列确定 序列(GDH)根节点为D;再再其次通过中序遍历序列得出D节点的左边为G(即为左子树),右边为H(即为右子树)。

最后就得出了这个二叉树的真实排布方式,从而可以简单的写出它的后续遍历序列。是不是被我的文字所折服——“首先~ 其次~ 。 再首先~ 再其次~ ”。其实后面的“再首先~ 再其次~”都和前面的“首先 其次”中讲的方法都是一样的。便于大家观察理解,我画一个草图吧。最终可以轻松计算其后续遍历序列为:GHDEBIFCA

(条件有限,大家就这样看吧,应该能看清楚。摸摸哒)

("自己做的每一次决定,都请你不要后悔。生活本就是未知的,为何不放手一搏呢? FIGHTING…")

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。