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

2021-10-12 09:41:21 字數 910 閱讀 2261

前面介紹了普通樹轉化為二叉樹的孩子兄弟表示法,本節來學習如何將森林轉化為一整棵二叉樹。森林,指的是由 n(n>=2)棵互不相交的樹組成的集合,如圖 1 所示。

在某些實際場景中,為了便於操作具有森林結構的資料,往往需要將森林轉化為一整棵二叉樹。我們知道,任意一棵普通樹都可以轉化為二叉樹,而森林是由多棵普通樹構成的,因此自然也可以轉化為二叉樹,其轉化方法是:

首先將森林中所有的普通樹各自轉化為二叉樹;

將森林中第一棵樹的樹根作為整個森林的樹根,其他樹的根節點看作是第一棵樹根節點的兄弟節點,採用孩子兄弟表示法將所有樹進行連線;

例如,將圖 2a) 中的森林轉化為二叉樹,則以上兩個轉化過程分別對應圖 2 中的 b) 和 c) :

如圖 2 所示,先將森林包含的所有普通樹各自轉化為二叉樹,然後將其他樹的根節點看作為第一棵二叉樹的兄弟節點,採用孩子兄弟表示法進行連線。森林轉化為二叉樹,更多的是為了對森林中的節點做遍歷操作。前面講過,遍歷二叉樹有 4 種方法,分別是層次遍歷、先序遍歷、中序遍歷和後序遍歷。轉化前的森林與轉化後的二叉樹相比,其層次遍歷和後序遍歷的訪問節點順序不同,而前序遍歷和中序遍歷訪問節點的順序是相同的。以圖 1 中的森林為例,其轉化後的二叉樹為圖 2c),兩者比較,其先序遍歷訪問節點的順序都是a b c d e f g h i j;同樣,中序遍歷訪問節點的順序也相同,都是b c d a f e h j i g。而後序遍歷和層次遍歷訪問節點的順序是不同的。提示,由二叉樹轉化為森林的過程也就是森林轉化二叉樹的逆過程,也就是圖 2 中由 c) 到 b) 再到 a) 的過程。

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

二叉樹轉化為樹 森林 樹和二叉樹是兩種不同的資料結構,樹實現起來比較麻煩,但是樹可以轉換為二叉樹進行處理,處理完以後再從二叉樹還原為樹。下面說說轉換的方法 1 樹中所有相同雙親結點的兄弟結點之間加一條連線。2 對樹中不是雙親結點第乙個孩子的結點,只保留新新增的該結點與左兄弟結點之間的連線,刪去該結點...

將二叉樹按照層級轉化為鍊錶

給一棵二叉樹,設計乙個演算法為每一層的節點建立乙個鍊錶。也就是說,如果一棵二叉樹有d層,那麼你需要建立d條鍊錶。樣例 1 輸入 輸出 1 null,2 3 null,4 null 解釋 1 2 3 4樣例 2 輸入 輸出 1 null,2 null,3 null 解釋 1 2 3 definitio...

樹與二叉樹的轉化

我們已經了解了樹的定義和儲存結構,對於樹來說,在滿足樹的條件下可以是任意形狀,乙個結點可以有任意多個孩子,顯然處理起來非常複雜,去研究相關的性質和演算法會很不容易。有沒有簡單的演算法來解決對樹的處理的難題呢?我們還介紹過二叉樹,儘管它也是樹形結構,但由於每個結點的度最多為2,變化相對簡單,因此很多二...