樹、森林與二叉樹的轉換


1、樹轉二叉樹

1.加線:在所有兄弟結點之間加一條連線
2.去線:對樹中每個結點,只保留它與第一個孩子結點的連線,刪除它與其它孩子結點之間的連線
3.層次調整:以樹的根節點為軸心,將整棵樹順時針旋轉一定角度,使之結構層次分明。
  注意:第一個孩子是二叉樹結點的左孩子,兄弟轉換過來的孩子是結點的右孩子

 

2、二叉樹轉換為樹

  二叉樹轉換為樹是樹轉換為二叉樹的逆過程,也就是反過來做而已。

1.加線。若某結點的左孩子存在,則將這個左孩子的右孩子結點、右孩子的右孩子結點、右孩子的右孩子結點的右孩子結點……,反正就是左孩子的n個右孩子結點都作為此結點的孩子。將該結點與這些右孩子結點用線連接起來。

2.去線:刪除原二叉樹中所有結點與其右孩子結點的連線。

3.層次調整:使之結構層次分明。

 

3.森林轉二叉樹

  森林是由若干顆樹組成,所以完全可以理解為,森林中的每一顆樹都是兄弟,可以按照兄弟的處理辦法來操作。步驟如下:

1.把每個樹轉換為二叉樹。

2.第一顆二叉樹不動,從第二顆二叉樹開始,依次把后一顆二叉樹的根結點作為前一顆二叉樹的根結點的右孩子,用線連接起來。當所有的二叉樹連接起來后就得到了由森林轉換來的二叉樹。

 

4.二叉樹轉換為森林

  判斷一顆二叉樹能夠轉換成一顆樹還是森林,標准很簡單,那就是只要看這顆二叉樹的根結點有沒有右孩子,有就是森林,沒有就是一顆樹。那么如果是轉換成森林,步驟如下:

 1.從根結點開始,若右孩子存在,則把與右孩子結點連線刪除,再查看分離后的二叉樹,若右孩子存在,則連線刪除……,直到所有右孩子連線都刪除為止,得到分離的二叉樹。

2.將每顆分離后的二叉樹轉換為樹即可。

 

 

5.樹與森林的遍歷

森林的遍歷分為兩種:

1.前序遍歷:先訪問森林中第一棵樹的根結點,然后再依次先根遍歷根的每顆子樹,再依次用同樣的方式遍歷除去第一顆樹的剩余樹構成的森林。如上圖右側三顆樹的森林,前序遍歷序列的結果就是  ABCDEFGHJI

2.后序遍歷:是先訪問森林中第一顆樹,后根遍歷的方式遍歷每顆子樹,然后再訪問根結點,再依次同樣方式遍歷除去第一顆樹的剩余樹構成的森林。如上圖右側三顆樹的森林,后序遍歷序列的結果就是 BCDAFEJHIG

森林的前序遍歷和二叉樹的前序遍歷結果相同,森林的后序遍歷和二叉樹的中序遍歷結果相同

 


免責聲明!

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



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