树
一种用于表达层级结构的数据结构,常用来表达文档、组织结构图、图形图像等。在此主要介绍树的表达方式以及相关基本算法。
1. 有根树
要求获得有根树中各节点的信息,如:节点编号、节点种类(根、内部节点、叶)、父节点编号、子节点编号、节点深度等。
采用“左子右兄弟表示法”来表示有根树(父节点、最左侧子节点、右侧紧邻的兄弟节点)
struct Node { int parent, int left, int right}
struct Node T[MAX];
getGepth(u)
d = 0
while T[u].parent != NIL // NIL用作一个特殊的节点编号
u = T[u].parent
d++
return d
//子节点列表
printChildren(u)
c=T[u].left
while c != NIL
print c
c = T[c].right
2. 二叉树
设给定二叉树有n个节点,编号分别为0至n-1 (节点编号、深度、父节点、高、兄弟节点、种类、子节点)
struct Node { int parent, int left, int right}
// 节点的高
setHeight(H, u)
h1 = h2 =0
if T[u].right != NIL
h1 = setHeight(H, T[u].right) + 1
if T[u].left != NIL
h2 = setHeight(H, T[u].left) + 1
return H[u] = max(h1, h2)
3. 树的遍历(左子树始终处于右子树前面)
a. 前序
按照根节点、左子树、右子树的顺序输出节点编号,伪代码如下:
PreParse(u)
if u == NIL // 表示没有后续节点
return
print u
preParse(T[u].left)
preParse(T[u].right)
b. 中序
按照左子树、根节点、右子树的顺序输出节点编号,伪代码如下:
InParse(u)
if u == NIL // 表示没有后续节点
return
InParse(T[u].left)
print u
InParse(T[u].right)
c. 后序
按照左子树、右子树、根节点的顺序输出节点编号,伪代码如下:
PostParse(u)
if u == NIL // 表示没有后续节点
return
PostParse(T[u].left)
PostParse(T[u].right)
print u

浙公网安备 33010602011771号