本節僅討論樹的三種常用表示法
雙親鏈表表示法利用樹中每個結點的雙親唯一性
(
方法① 用動態鏈表實現
方法② 用向量表示——更為方便
(
#define MaxTreeSize
typedef char DataType
typedef struct{
DataType data
int parent
}PTreeNode
typedef struct{
PTreeNode nodes[MaxTreeSize];
int n
}PTree
PTree T
注意
若T
(
【例】圖
分析
E和F所在結點的雙親域是
注意
① 根無雙親
② 雙親鏈表表示法中指針parent向上鏈接
(
① 定長結點
即樹中每個結點均按樹的度k來設置指針
n個結點的樹一共有n*k個指針域
kn
②不定長結點
即樹中每個結點按本結點的度來設置指針數
各結點不等長
(
孩子鏈表表示法是為樹中每個結點設置一個孩子鏈表
①孩子鏈表表示法的類型說明
//以下的DataType和MaxTreeSize由用戶定義
typedef struct CNode{//子鏈表結點
int child
struct CNode *next
}CNode
typedef struct{
DataType data
CNode *firstchild
}PTNode
typedef struct{
PTNode nodes[MaxTreeSize]
Int n
}CTree
Ctree T
注意
當結點T
②孩子鏈表表示法實例
【例】圖
注意
① 孩子結點的數據域僅存放了它們在向量空間的序號
② 與雙親鏈表表示法相反
③ 將雙親鏈表表示法和孩子鏈表表示法結合起來
【例】上面的(b)圖就是用雙親鏈表表示法來存儲圖
(
在存儲結點信息的同時
(
【例】圖
注意
這種存儲結構的最大優點是
From:http://tw.wingwit.com/Article/program/sjjg/201311/23211.html