已知二叉树的先序遍历序列和中序遍历序列,求其后序遍历序列


2018.1.19 Fri

已知二叉树的先序遍历序列和中序遍历序列,求其后序遍历序列

 

例:

       先序遍历:ABDGCEFH

       中序遍历:DGBAECHF

 

解:

首先要先知道各种遍历方式的规则:

先序遍历(先根遍历、前序遍历):1. 访问根结点2. 遍历左子树3. 遍历右子树

中序遍历(中根遍历):1. 遍历左子树2. 访问根结点3. 遍历右子树

后序遍历(后根遍历):1. 遍历左子树2. 遍历右子树3. 访问根结点

 

且无论哪种遍历,左右子树仍然遵循该遍历规则。若没有左子结点或右子结点(即不是满二叉树,如图2)则输出一个空代替一下就好,然后继续遍历。例如图二中后序遍历为:BOA,即BA。

 

 

因为先序遍历是先访问根节点,所以A一定是根节点。因此可以进行如下拆分:

       先序遍历:A  BDGCEFH

       中序遍历:DGB  A  ECHF

又因为中序遍历的顺序是:左子树,根节点,右子树,所以再拆

  先序遍历:A  BDG  CEFH

       中序遍历:DGB  A  ECHF

然后同理看BDG树

       先序遍历:B  DG

       中序遍历:DG  B

得到B是A的左子结点。

同理看DG树:

  先序遍历:D  G

       中序遍历:D  G

得到D是B的左子结点, G是D的右子结点。(因为如果G是左子结点的话中序遍历是GD)。

得到了左子树。

右子树同理:

       先序遍历:C  E  FH

  中序遍历:E  C  HF

得到C是A的右子结点,E是C的左子结点。

       先序遍历:F  H

  中序遍历:H  F

得到F是C的右子结点,H是F的左子结点。

得到右子树。

得到如图1的二叉树。

然后得到后序遍历:

       GDBEHFCA

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM