我們已經了解了樹的定義和儲存結構,對於樹來說,在滿足樹的條件下可以是任意形狀,乙個結點可以有任意多個孩子,顯然處理起來非常複雜,去研究相關的性質和演算法會很不容易。有沒有簡單的演算法來解決對樹的處理的難題呢?
我們還介紹過二叉樹,儘管它也是樹形結構,但由於每個結點的度最多為2,變化相對簡單,因此很多二叉樹的性質和演算法都被研究出來。如果書友的樹都像二叉樹一樣方便就好了,這就涉及到二者的轉換。
在講到樹的儲存結構時,我們提到了樹的孩子兄弟法可以將一棵樹用二叉鍊錶進行儲存,所以借助於二叉鍊錶,樹和二叉樹可以相互進行轉換。因為從物理結構而言,他們的二叉鍊錶是相同的,只是解釋不同。
將樹轉換為二叉樹的步驟如下:
1加線:所有兄弟節點之間加線
2去線:保留樹中每個結點與它第乙個孩子的連線,刪除其與其他孩子的連線
3層次調整:以根結點為軸心,將整棵樹旋轉,使之層次分明。
而將二叉樹轉換為樹,正好是乙個相逆的過程。
當以二叉鍊錶做樹的儲存結構時,樹的線序遍歷和後續遍歷完全可以借用二叉樹的先序遍歷和中序遍歷的演算法來實現。這其實也證實,我們找到了對樹這種複雜問題的簡單解決方法。
多叉樹轉二叉樹
多叉樹的根結點為二叉樹的根,多叉樹的結點的第乙個兒子變成二叉樹對應結點的左孩子,多叉樹的結點的右兄弟變成二叉樹種該結點的右孩子。如下 c語言 01 include 02 include 03 include 04 include 0506 typedef struct treenode treeno...
樹轉二叉樹(有序樹轉換為二叉樹)講解
description 輸入一顆普通有序樹,將它轉換為對應的二叉鍊錶儲存,然後輸出該二叉樹的先序和後序遍歷序列。input 包含多組測試資料。每組測試資料第1行為樹的結點個數n 1 n 26 接下來包含n行,其中第i行 1 i n 的資料依次為結點i的資料值ai 為乙個小寫字母 後面各元素為結點i的...
樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹
目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...