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

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

樹和二叉樹的轉換

樹和二叉樹是兩種不同的數據結構,樹實現起來比較麻煩,但是樹可以轉換爲二叉樹進行處理,處理完以後再從二叉樹還原爲樹。
下面說說轉換的方法:

1. 樹轉換爲二叉樹

(1) 樹中所有相同雙親結點的兄弟結點之間加一條連線。
(2) 對樹中不是雙親結點第一個孩子的結點,只保留新添加的該結點與左兄弟結點之間的連線,刪去該結點與雙親結點之間的連線。
(3) 整理所有保留的和添加的連線,使每個結點的第一個孩子結點連線位於左孩子指針位置,使每個結點的右兄弟結點連線位於右孩子指針位置。
如下是樹轉換爲二叉樹的過程示例圖:

在這裏插入圖片描述

分爲三個步驟:

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

  2. 保存長子線
    對於樹中的每一個結點,如果其有多個子節點,保存其第一個子節點的連線,去除其他子節點的連線。

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

案例:
在這裏插入圖片描述

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

第一步:兄弟+橫線
在這裏插入圖片描述

第二步:保留長子線
在這裏插入圖片描述

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

在這裏插入圖片描述

2. 二叉樹還原爲樹

(1) 若某結點是其雙親結點的左孩子,則把該結點的右孩子、右孩子的右孩子……都與該結點的雙親結點用線連起來。
(2) 刪除原二叉樹中所有雙親結點與右孩子結點的連線。
(3) 整理所有保留的和添加的連線,使每個結點的所有孩子結點位於相同層次高度。
如下是二叉樹還原爲樹的過程示意圖:
在這裏插入圖片描述

(由於我自己太懶了,圖沒有自己畫,以上圖片來自百度圖片搜索)

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

將每課樹轉換成二叉樹

將每課樹的根結點連接起來
把每棵樹的根當做兄弟結點處理,兄弟加橫線

旋轉調整位置

案例:
在這裏插入圖片描述

將上述森林轉化爲二叉樹

第一步:每課樹都轉化爲二叉樹
在這裏插入圖片描述

第二步:根節點橫線連接
在這裏插入圖片描述

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

在這裏插入圖片描述

二叉樹轉化爲樹、森林

二叉樹轉化樹

一般分三個步驟:

若某結點的左孩子結點存在,將左孩子結點的右孩子結點、右孩子結點的右孩子結點……都作爲該結點的孩子結點,將該結點與這些右孩子結點用線連接起來;
刪除原二叉樹中所有結點與其右孩子結點的連線;
調整位置
在這裏插入圖片描述

二叉樹轉化森林

三步:

  • 先把每個結點與右孩子結點的連線刪除,得到分離的二叉樹;
  • 把分離後的每棵二叉樹轉換爲樹;
  • 調整位置
    在這裏插入圖片描述

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章