树中的相对位置。结点结构如图9.4所示。
data parent
第13页/共128页
9.1 树
•
在C语言中,通常采用数组存储双亲表示的树结点,这类似于静态链表
的实现。一棵树结构及树的双亲表示法如图9.5所示。
A
B
C
D
E
F
G
H IJ
双亲 数组下标 结点 位置
0 A -1 1B 0 2C 0 3D 0 4E 1 5F 1 6G 3 7H 6 8I 6 9J 6
4E ^ 5F ^ 6G
孩子结点
7H ^ 8I ^
9J ^
1 4
6^
2 5^
3^
7
8
9^
第16页/共128页
9.1 树
•
为此,需要设计两个结点结构,一个是孩子链表的孩子结点,如图9.6所
示。其中,child是数据域,存放结点在表头数组中的下标;next是指针域,
存放指向下一个孩子结点的指针。另一个是表头数组的表头结点,如图9.7所
A
B E K L F
C G M H I N D
J
第8页/共128页
9.1 树
• 树的抽象数据类型
•
1.数据对象集合
•
树的数据对象集合为树的各个结点的集合。一个数据元素只有一个直接前
驱,但可能有m(m≥0)个直接后继。元素之间是一对多的关系。例如,在树
(A(B(E(K,L),F),C(G(M),H,I(N)),D(J)))中,’G’、’H’和’I’是结点’C’的后
9.1 树
•
(9)Inser tChild(&T,p,Child)
• 初始条件:树T已存在,p指向T中的某个结点。