一、普通樹轉換為二叉樹
樹
步驟如下:
-
加線:在所有兄弟結點之間加一條連線
兄弟之間加連線 去線:對樹中每個結點,只保留它與第一孩子結點的連線,刪除它與其他孩子結點之間的連線
-
層次調整:以樹的根節點為軸心,將整棵樹順時針旋轉一定的角度,使之結構層次分明
去線+層次調整
二、森林轉換為二叉樹
森林
步驟:
-
把每棵樹都轉換為二叉樹
轉化為二叉樹1
轉化為二叉樹2 -
第一棵二叉樹不動,從第二棵二叉樹開始,依次把后一棵二叉樹的根節點作為前一棵二叉樹的根節點的右孩子,用線連接起來。
森林轉化為二叉樹
三、二叉樹轉化為樹、森林
二叉樹轉化為普通樹是之前的逆過程,步驟也就是反過來而已。
判斷一棵二叉樹能夠轉換為一棵樹還是森林,標準很簡單,就是只要看這棵二叉樹的根節點有沒有右孩子,有的話就是森林,沒有的話就是一棵樹
二叉樹
連線右孩子
去掉所有雙親到右孩子之間的連線
調整位置
四、樹與森林的遍歷
樹的遍歷分為兩種方式:一種是先根遍歷,另一種是后根遍歷
先根遍歷:先訪問樹的根節點,然后再依次先根遍歷根的每棵子樹
后根遍歷:先依次遍歷每棵子樹,然后再訪問根節點
先根遍歷和后根遍歷
森林的遍歷也分為前序遍歷和后序遍歷,其實就是按照樹的先根遍歷和后根遍歷依次訪問森林的每一棵樹
我們的驚人發現:
樹、森林的前根(序)遍歷和二叉樹的前序遍歷結果相同,樹、森林的后根(后序)遍歷和二叉樹的中序遍歷結果相同!