当前位置:
文档之家› 湘潭大学 数据结构 Ch04 Trees
湘潭大学 数据结构 Ch04 Trees
bill 1
book 1
course 1 hw.c 6 hw.c 8 work 1 course 1
ch1.c 3 ch2.c 2 ch3.c 4 cop3530 1
cop3212 1
fall96 1 spr97 1 sum97 1
fall96 1
preorder ( C ); } }
〖例1〗 列出分级文件系统中的目录。
/usr
mark
alex
bill
book
course hw.c hw.c work course
ch1.c ch2.c ch3.c cop3530
cop3212
fall96 spr97 sum97
fall96
fall97
syl.r syl.r syl.r grades p1.r p2.r p2.r p1.r grades
树的高度(深度)::= height(root) = depth(deepest leaf).
祖先结点(Ancestor) ::=沿树根到某一结点路径上的所有结点都是 这个结点的祖先结点。
子孙结点(Descendant) ::=某一结点的子树中的所有结点是这个 结点的子孙。
2. 树的实现 ❖ 链表表示法
NN NN
N
NN
KL
M
N
NN
NN
Note: 这种表示法并非唯一的,因为树的节点的孩子顺序 是不固定的。
树的遍历—— 访问每个节点恰好一次
❖ 前序遍历
void preorder ( tree_ptr tree ) { if ( tree ) {
visit ( tree ); for (each child C of tree )
}
❖ 后序遍历
void postorder ( tree_ptr tree ) { if ( tree ) {
for (each child C of tree ) postorder ( C );
visit ( tree ); } }
〖例2〗 计算一个目录的大小。
/usr 1
mark 1
alex 1
A BC D
树的度::=
madxeg (nro)ed ee
no tdreee
例如, degree of this tree = 3.
父节点(Parent) ::= 有子树的节点是 其子树根节点的父节点。
E F G HI J
KL
M
ቤተ መጻሕፍቲ ባይዱ
子节点(Child) ::= 若A节点是B节点的父节点,则B节点是A节点 的子节点,也叫孩子节点。
Unix directory
输出格式: 深度为 di 的文件的名字将被 di 次跳格(tab)缩进后打印出
来。
/usr mark book Ch1.c Ch2.c Ch3.c course cop3530 fall96 syl.r spr97 syl.r sum97 syl.r hw.c alex hw.c bill work course cop3212 fall96 grades p1.r p2.r fall97 p2.r p1.r grades
都被来自根 r 的一条有向边( edge)所连接。
Note: ➢ 子树是不相交的。因此树中的每一个节点都是一棵子
树的根。 ➢ 一棵有N个节点的树中有 N 1 条边。 ➢ 根节点通常画在上方。
§1 预备知识
1. 术语
节点的度(Degree)::= 节点的子树个数。 例如, degree(A) = 3, degree(F) = 0.
A BC D
路径长度::=一条路径的长度为这条路径所 包含的边(分支)的个数。
E F G HI J
ni的深度::= 从根到ni 唯一的路径的长度。 K L
M
Depth(root) = 0.
ni的高度::= 从ni 到一片叶子的最长路径的长度。Height(leaf) = 0, height(D) = 2.
A BC D E F G HI J
KL
M
B
E
F
A
C
G
H
D
I
J
§1 预备知识
因此,每个节点的大小取决于 子树数目。噢,这样并不太好! K L M
§1 预备知识
❖ 儿子-兄弟表示法
Element FirstChild NextSibling
A BC D E F G HI J
KL
M
A
N
B
C
D
N
E
F G HI J
} }
T ( N ) = O( N )
Note: 深度(Depth)是一个内部簿记变量, 而不是主调例程能够期望知道的那种参 数,因此,驱动例程ListDirectory用于 将递归例程和外界连接起来。
void ListDirectory ( DirOrFile D )
{
ListDir( D, 0 );
static void ListDir ( DirOrFile D, int Depth ) {
if ( D is a legitimate entry ) { PrintName (D, Depth ); if ( D is a directory ) for (each child C of D ) ListDir ( C, Depth + 1 );
佛 教
一 般 性 技 术
计 算 机 软 件
电 子 模 拟 计 算
微 型 计… 算 机
机
计 算 机 的 应 用
宗 教 与 社 会 政
宗
教 与
…
科
学
破 除 迷 信
治
软程
编操
件 序… 译 作
工语
程系
程言
序统
§1 预备知识
【定义】树是一些节点的集合。这个集合可以是空集;若非 空,则树包含:
(1) 一个被称为根的特殊节点 r; (2) 以及0个或多个非空(子)树 T1, , Tk,每一棵子树的根
兄弟节点(sibling) ::= 具有同一父节点的各节点彼此是兄弟节点。
叶节点(leaf):= 度为0的节点 (没有孩子)。
§1 预备知识
从n1 到 nk 的路径 ::=从结点n1到nk的路径被 定义为一个结点序列n1 , n2 ,… , nk ,对于1 i k, ni是 ni+1的父结点。
第四章 树
§1 预备知识
客观世界中许多事物存在层次关系 ◦ 人类社会家谱 ◦ 社会组织结构 ◦ 图书信息管理
图书
哲
学
…
宗
教
文 学
医 药 卫
农 业 科
工 业 技
生学术
综
…
合
哲 学 理
世
欧
界 哲
…
洲 哲
宗 教
论学
学
电 工 技 术
计 算… 机
建 筑 科 学
水 利 工 程
宗 教 分 析 研 究
宗 教… 理 论 与 概 况