二叉樹轉化為樹、森林
樹和二叉樹是兩種不同的資料結構,樹實現起來比較麻煩,但是樹可以轉換為二叉樹進行處理,處理完以後再從二叉樹還原為樹。(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肯定是整...