二叉樹的序列


 

先序: 根節點、左子樹、右子樹 
中序:左子樹、根節點、右子樹
后序:左子樹、右子樹、根節點
要理解清楚是子樹,不是孩子。。。

如上圖根節點為A,那么{B、D、E、H}為左子樹,而{C、F、G、I、J}組成其右子樹。再深入A的左子樹,它也是一棵二叉樹,根節點為B,左子樹為{D},右子樹為{E、H}。依此類推。。

先序:A、B、D、E、H、C、F、G、I、J
中序:D、B、H、E、A、F、C、I、G、J
后序:D、H、E、B、F、I、J、G、C、A



今天數據結構的考試有這個題,做了好久,下來后,我好好地在網上查了一下,並結合我自己的理解,總結出來了一個比較好理解的方法。這個方法可以說做起這樣的題又快又准。
 (概括為一個口訣:先序放中間,中序分兩邊)
 
 基本思想就是遞歸:

1.取出先序的第一個節點。(先序中的節點為根節點)
2.用第一個節點可以將中序分成左右子樹,然后又取出先序的第二個節點
   再次將左右子樹再次划分,
3,當將中序全部划分為單個點時就結束。

例如:假設一顆二叉樹的先序序列是:EBADCFHGIKJ。 中序序列為:ABCDEFGHIJK。請畫出該二叉樹



如何由二叉樹的先序和中序序列畫出二叉樹 - wz625 - wanna

生成的二叉樹如下圖所示:
如何由二叉樹的先序和中序序列畫出二叉樹 - wz625 - wanna
 


 問題擴展:
      1,只有先序和中序 或 中序和后序可以確定一顆樹。先序和后序確定不了一顆樹。
      2,如何根據中序和后序確定一顆樹呢?
             方法跟上面的由先序和中序確定一顆樹的思想大同小異。
             例如:中序:BEDAC  后序:   EDBCA
                                                              <---------找根的方向
                 先是A是根,故有根A,左子樹為BED  右子樹為C
                 然后是C為根,C的左右子樹均為空。
                 然后是B為根,B的左子樹為空,右子樹為ED
                 然后是D為根,D的左子樹為E,右子樹為空。
                  然后是E為根,左右子樹均為空。

            根據上面幾個步驟就可以將確定的樹畫出來


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM