我們已經了解了樹的定義和儲存結構,對於樹來說,在滿足樹的條件下可以是任意形狀,乙個結點可以有任意多個孩子,顯然處理起來非常複雜,去研究相關的性質和演算法會很不容易。有沒有簡單的演算法來解決對樹的處理的難題呢?
我們還介紹過二叉樹,儘管它也是樹形結構,但由於每個結點的度最多為2,變化相對簡單,因此很多二叉樹的性質和演算法都被研究出來。如果書友的樹都像二叉樹一樣方便就好了,這就涉及到二者的轉換。
在講到樹的儲存結構時,我們提到了樹的孩子兄弟法可以將一棵樹用二叉鍊錶進行儲存,所以借助於二叉鍊錶,樹和二叉樹可以相互進行轉換。因為從物理結構而言,他們的二叉鍊錶是相同的,只是解釋不同。
將樹轉換為二叉樹的步驟如下:
1加線:所有兄弟節點之間加線
2去線:保留樹中每個結點與它第乙個孩子的連線,刪除其與其他孩子的連線
3層次調整:以根結點為軸心,將整棵樹旋轉,使之層次分明。
而將二叉樹轉換為樹,正好是乙個相逆的過程。
當以二叉鍊錶做樹的儲存結構時,樹的線序遍歷和後續遍歷完全可以借用二叉樹的先序遍歷和中序遍歷的演算法來實現。這其實也證實,我們找到了對樹這種複雜問題的簡單解決方法。
樹轉化為二叉樹 森林轉化為二叉樹(詳解版)
前面介紹了普通樹轉化為二叉樹的孩子兄弟表示法,本節來學習如何將森林轉化為一整棵二叉樹。森林,指的是由 n n 2 棵互不相交的樹組成的集合,如圖 1 所示。在某些實際場景中,為了便於操作具有森林結構的資料,往往需要將森林轉化為一整棵二叉樹。我們知道,任意一棵普通樹都可以轉化為二叉樹,而森林是由多棵普...
二叉樹 滿二叉樹與完全二叉樹
二叉樹 binary tree 是n n 0 個元素的有限集合,該集合為空或者為由乙個稱為 根 的元素及兩個不相交的 被分別稱為左子樹和右子樹的二叉樹組成 二叉樹的基本特點 每個結點最多有兩棵子樹 左子樹和右子樹是有順序的,且不可顛倒 圖一1 結點 二叉樹中的每乙個元素都稱為結點。通常二叉樹的許多名...
樹與二叉樹
樹是一類重要的非線性資料結構,是以分支關係定義的層次結構 定義 樹 tree 是n n 0 個結點的有限集t,其中 n 0時為空樹 n 0時,有且僅有乙個特定的結點,稱為樹的根 root 當n 1時,其餘結點可分為m m 0 個互不相交的有限集t1,t2,tm,其中每乙個集合本身又是一棵樹,稱為根的...