1、雙親表示法
實現:定義結構陣列,存放樹的結點,每個結點包含兩個域:
資料域:存放結點本身資訊
雙親域:指示本結點的雙親結點在陣列中的位置
陣列下標
data
parent0r
-11a0
2b03
c04d
15e1
6f37
h68h
69k6
特點:找雙親容易,找孩子難
**實現
typedef
struct ptnode
ptnode;
#define max_tree_size 100
typedef
struct
ptree;
2、孩子鍊錶
把每個結點的孩子結點排列起來,看成是乙個線性表,用單鏈表儲存。n個結點有n個孩子鍊錶(葉子的孩子鍊錶為空表)。而n個頭指標又組成了乙個線性表,用順序表(含n個元素的結構陣列)儲存。
結點結構
**實現
typedef
struct ctnode//孩子結點結構
*childptr;
typedef
struct ctbox//雙親結點結構
ctbox;
typedef
struct ctree
ctree;
3、孩子兄弟表示法
**實現
優點缺點
雙親表示法
尋找結點的雙親結點效率高
尋找結點的孩子結點效率低
孩子表示法
尋找結點的孩子結點效率高
尋找結點的雙親結點效率低
孩子兄弟表示法
尋找結點的孩子結點效率高,方便實現樹轉換為二叉樹
尋找結點的雙親效率低
將樹轉換成二叉樹
加線:在兄弟之家加一連線
抹線:對每個結點,除了其左孩子外,去除其與其餘孩子之間的關係
旋**以樹的根結點為軸心,將整樹順時針轉45°
加線:若p結點是雙親結點的左孩子,則將p的右孩子,右孩子的右孩子…沿分支找到所有的右孩子,都與p的雙親用線連起來
抹線:抹掉原二叉樹中雙親域右孩子之間的連線
調整:將結點按層次排列,形成樹結構
森林轉換成二叉樹(二叉樹與多棵樹之間的關係)
將各棵樹分別轉換成二叉樹
將每棵樹的根結點用線相連
以第一棵樹根結點為二叉樹的跟,再以根結點為軸心,順時針旋轉,構成二叉樹型結構
二叉樹轉換成森林
抹線:將二叉樹中根結點與其右孩子連線,及沿右分支搜尋到的所有右孩子間連線全部抹掉,使之變成孤立的二叉樹
還原:將孤立的二叉樹還原成樹
資料結構之樹的儲存結構
樹是一種一對多的資料結構,這個一對多很好解釋,就比如乙隻狗媽媽,會有多隻小奶狗,這不就有一對多的意思嗎!樹的根節點有且只有乙個,就比如小奶狗們只有乙個親狗媽。那麼圖上的 b c d e 都是樹的根節點 a 的孩子 總之,樹就是有很多結點構成,只不過這些結點在樹中會有不同的稱呼,來分析一下下圖 度 結...
《資料結構》樹的儲存結構2019 10 15
定義 1 只有乙個根結點 2 其餘結點為幾個不相交的有限集,他們本身也是一棵樹,且被稱為根的子樹。樹的定義就用到了遞迴的方法。幾個概念 結點的度 該結點擁有的子樹的數量 葉結點 度為0的結點 樹的度 結點度的最大值 層次 根結點為第一層,其孩子為第二層,以此類推。深度 結點的最大層數 高度 數量和深...
資料結構中的樹儲存結構
圖1 樹的示例 圖 1 a 是使用樹結構儲存的集合 的示意圖。對於資料 a 來說,和資料 b c d 有關係 對於資料 b 來說,和 e f 有關係。這就是 一對多 的關係。將具有 一對多 關係的集合中的資料元素按照圖 1 a 的形式進行儲存,整個儲存形狀在邏輯結構上看,類似於實際生活中倒著的樹 圖...