二叉树的先序,中序,后序遍历

二叉树的遍历:
(1)先序遍历:先访问根节点然后是左孩子节点最后是右孩子节点即为:根->左->右
(2)中序遍历:先访问左孩子节点然后是根节点最后是右孩子节点即为:左->根->右
(3)后序遍历:先访问左孩子节点然后是右孩子节点最后是根节点即为:左->右->根
对于每一个节点都是上面所述的顺序遍历(指的是根,左孩子,右孩子的访问顺序)
下面是求先序中序后序遍历的样例:
在这里插入图片描述
根据上图先序遍历的结果是:先看A(根节点){A}然后A的左边,左边第一个根节点是B把B加入到结果中{A B},然后是B的左孩子D{A B D}B没有右孩子不用考虑,接着是D的左孩子G加入到结果中去{A B D G},左边遍历完毕考虑右边第一个右边节点是C(因为C为A的右孩子所以在考虑完A的左孩子之后自然该右孩子){A B D G C},接着考虑C的左孩子E{A B D G C E}该考虑E了但是E没有孩子所以考虑C的右孩子F{A B D G C E F}遍历完成!
中序遍历和先序遍历几乎一样只不过先考虑左孩子然后是根节点最后是右孩子,所以模拟一遍之后的结果应该是{G D B A E C F}
后序遍历为{G D B E F C A}

下面来介绍如何根据已知的两种遍历结果如何来写另一种遍历的结果和还原树的形态;
例如一种树的中序遍历结果为:D E B A C;后序遍历结果为:D A B E C;
求先序遍历结果:
首先后序遍历的最后一个元素肯定是根节点所以根节点为C然后来到中序遍历的结果里面查找C所处的位置看完后会发现他只有左孩子(所有元素均在左边)之后回到后序遍历里面下一个根节点就是紧挨着C的那一个所以E就是C的左孩子接下来继续回看中序遍历查看E所处的位置结果发现它的左边是D无疑D就是它的左孩子右边有两个B和A这时候需要回到后序遍历发现紧挨着的是B所以B是E的右孩子(因为右孩子之后就是根节点所以B一定是E的右孩子)最后A就是B右孩子(这一个是在中序里面看出来的B的左边没有A是在B的右边的)
所以先序遍历结果是{C E D B A}
树的形状建好之后就会是:
在这里插入图片描述
总结:在已知两种遍历顺序求另一种的时候肯定会有一个中序遍历的顺序是已经知道的因为要查看一个节点的左孩子和右孩子分别是什么;
还有一点就是先序遍历和后序遍历和上一个节点紧挨着的那一个肯定就是下一个根节点,下一步需要做的就是到中序遍历里面查看他所在的位置,以便于来确定他的左孩子和右孩子是谁(然后就是以他的左孩子或者右孩子作为根节点来找下一个)也就是说中序和后序紧挨着上一个根节点的一定是下一个所求的根节点具体原因是先序和后序的遍历顺序根节点要么是在最前面要么就是最后面
下面是练习题目:
(1)已知一棵二叉树的前序遍历结ABCDE中序遍历结果CBAED则后序遍历的结果是:CBEDA
(2)已知某二叉树的中序遍历序列是D E B A C;后序遍历结果为:D A B E C先序遍历的结果是C E D B A;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

皮皮皮皮皮皮皮卡乒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值