樹 森林 以及二叉樹之間的轉化

2021-10-05 18:33:15 字數 1630 閱讀 4072

二叉樹轉化為樹、森林

樹和二叉樹是兩種不同的資料結構,樹實現起來比較麻煩,但是樹可以轉換為二叉樹進行處理,處理完以後再從二叉樹還原為樹。

下面說說轉換的方法:

(1) 樹中所有相同雙親結點的兄弟結點之間加一條連線。

(2) 對樹中不是雙親結點第乙個孩子的結點,只保留新新增的該結點與左兄弟結點之間的連線,刪去該結點與雙親結點之間的連線。

(3) 整理所有保留的和新增的連線,使每個結點的第乙個孩子結點連線位於左孩子指標位置,使每個結點的右兄弟結點連線位於右孩子指標位置。

如下是樹轉換為二叉樹的過程示例圖:

分為三個步驟:

兄弟+橫線

樹中的每乙個結點,如果該結點有兄弟結點,那麼就在這幾個兄弟結點之間進行連線。

儲存長子線

對於樹中的每乙個結點,如果其有多個子節點,儲存其第乙個子節點的連線,去除其他子節點的連線。

調整位置

對每個結點調整一定的位置,使其符合二叉樹的標準。

案例:

將上圖中的樹轉化為二叉樹

第三步:調整位置,橫線變斜線

(1) 若某結點是其雙親結點的左孩子,則把該結點的右孩子、右孩子的右孩子……都與該結點的雙親結點用線連起來。

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

(3) 整理所有保留的和新增的連線,使每個結點的所有孩子結點位於相同層次高度。

如下是二叉樹還原為樹的過程示意圖:

森林轉二叉樹

森林轉二叉樹分為三個步驟

將每課樹轉換成二叉樹

將每課樹的根結點連線起來

把每棵樹的根當做兄弟結點處理,兄弟加橫線

旋轉調整位置

將上述森林轉化為二叉樹

第一步:每課樹都轉化為二叉樹

第三步:調整位置,橫線變斜線

一般分三個步驟:

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

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

調整位置

三步:

注:在考研試題當中,一般很少會單獨考這個知識點,一般會將這個知識點與二叉樹的前序、中序、後序遍歷結合,與樹和森林的先根、後根遍歷相結合。

樹轉化為二叉樹 森林轉化為二叉樹(詳解版)

前面介紹了普通樹轉化為二叉樹的孩子兄弟表示法,本節來學習如何將森林轉化為一整棵二叉樹。森林,指的是由 n n 2 棵互不相交的樹組成的集合,如圖 1 所示。在某些實際場景中,為了便於操作具有森林結構的資料,往往需要將森林轉化為一整棵二叉樹。我們知道,任意一棵普通樹都可以轉化為二叉樹,而森林是由多棵普...

樹 森林 二叉樹之間的轉換

樹轉換二叉樹 1加線 2刪線 3旋轉。特點 得到的二叉樹左孩子節點都是原來樹中父子關係,右孩子節點都是原來樹中的兄弟關係 且永遠都是一棵根節點的右子樹為空。二叉樹轉換樹 1加線 2刪線 3旋轉。特點 反向同理樹轉換二叉樹 即右孩子變兄弟,左孩子還是孩子,若二叉樹有右子樹,則可以轉換成森林。森林轉換成...

樹,森林,二叉樹之間的關係

1.具有1102個結點的完全二叉樹一定有 個葉子結點。3分 解答 設n2為度為2的節點,n1為度為1的節點,n0為度為0的節點 邊數n 節點數 1,即n 1101 n 2n2 n1 完全二叉樹度為1的節點只能有0個或1個 不信可以畫畫看一下 所以n1 0或者1用n 2n2 n1 算一下,n2肯定是整...