樹 森林與二叉樹的轉換以及樹和森林的遍歷

2021-10-02 14:33:59 字數 1445 閱讀 9441

一:關於樹,二叉樹,森林的概念和區別可參考

(1)(2)

二:樹轉換為二叉樹

由於二叉樹是有序的,為了避免混淆,對於無序樹,我們約定樹中的每個結點的孩子結點按從左到右的順序進行編號。

將樹轉換成二叉樹的步驟是:

(1)加線。就是在所有兄弟結點之間加一條連線;

(2)抹線。就是對樹中的每個結點,只保留他與第乙個孩子結點之間的連線,刪除它與其它孩子結點之間的連線;

(3)旋轉。就是以樹的根結點為軸心,將整棵樹順時針旋轉一定角度,使之結構層次分明。

三:森林轉換為二叉樹

森林是由若干棵樹組成,可以將森林中的每棵樹的根結點看作是兄弟,由於每棵樹都可以轉換為二叉樹,所以森林也可以轉換為二叉樹。

將森林轉換為二叉樹的步驟是:

(1)先把每棵樹轉換為二叉樹;

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

四:二叉樹轉換為樹

二叉樹轉換為樹是樹轉換為二叉樹的逆過程,其步驟是:

(1)若某結點的左孩子結點存在,將左孩子結點的右孩子結點、右孩子結點的右孩子結點……都作為該結點的孩子結點,將該結點與這些右孩子結點用線連線起來;

(2)刪除原二叉樹中所有結點與其右孩子結點的連線;

(3)整理(1)和(2)兩步得到的樹,使之結構層次分明。

五:二叉樹轉換為森林

二叉樹轉換為森林比較簡單,其步驟如下:

(1)先把每個結點與右孩子結點的連線刪除,得到分離的二叉樹;

(2)把分離後的每棵二叉樹轉換為樹;

(3)整理第(2)步得到的樹,使之規範,這樣得到森林。

六:樹和森林的遍歷(注意:不是二叉樹)

樹的遍歷主要有先根遍歷和後根遍歷:

先根遍歷:若樹非空,則先訪問根結點,再按照從左到右的順序遍歷根結點的每一棵子樹。

後根遍歷:若樹非空,則按照從左到右的順序遍歷根結點的每一棵子樹,之後再訪問根結點。

森林的遍歷:需要澄清的是,只有二叉樹森林才有中序遍歷與完整二叉樹中序遍歷對應

先序遍歷森林。

若森林非空,訪問森林的第一棵樹的根結點。

先序遍歷第一棵樹中根結點的子樹

先序遍歷除去掉遍歷過的樹的森林

性質:(1)森林的前序遍歷與二叉樹的前序遍歷結果相同

(2)森林的後序遍歷與二叉樹的中序遍歷結果相同

參考:(1)

(2)

樹和森林與二叉樹的轉換

1.在二叉樹的第i層上至多有 2 2.深度為k的二叉樹上至多含 2 k 1 3.對任何一棵非空二叉樹,如果它含有 n 0 個葉子結點,n 2 個度為2的結點,那麼 n 0 n 2 1 4.具有n個結點的完全二叉樹的深度為 n 1 5.對有n個結點的完全二叉樹編號後,則對任意乙個編號為i的結點 若i ...

二叉樹 樹 森林轉換

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

樹 森林與二叉樹的轉換

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