已知二叉樹的先序遍歷序列和中序遍歷序列,求其后序遍歷序列


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