数据结构--树 ppt课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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节点 的子节点,也叫孩子节点。
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 JFra bibliotekKLM
A
N
B
C
D
N
E
F G HI J
第四章 树
§1 预备知识
客观世界中许多事物存在层次关系 ◦ 人类社会家谱 ◦ 社会组织结构 ◦ 图书信息管理
图书
哲
学
…
宗
教
文 学
医 药 卫
农 业 科
工 业 技
生学术
综
…
合
哲 学 理
世
欧
界 哲
…
洲 哲
宗 教
论学
学
电 工 技 术
计 算… 机
建 筑 科 学
水 利 工 程
宗 教 分 析 研 究
宗 教… 理 论 与 概 况
} }
T ( N ) = O( N )
Note: 深度(Depth)是一个内部簿记变量, 而不是主调例程能够期望知道的那种参 数,因此,驱动例程ListDirectory用于 将递归例程和外界连接起来。
void ListDirectory ( DirOrFile D )
{
ListDir( D, 0 );
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
A BC D
路径长度::=一条路径的长度为这条路径所 包含的边(分支)的个数。
E F G HI J
ni的深度::= 从根到ni 唯一的路径的长度。 K L
M
Depth(root) = 0.
ni的高度::= 从ni 到一片叶子的最长路径的长度。Height(leaf) = 0, height(D) = 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 )
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
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 );
树的高度(深度)::= height(root) = depth(deepest leaf).
祖先结点(Ancestor) ::=沿树根到某一结点路径上的所有结点都是 这个结点的祖先结点。
子孙结点(Descendant) ::=某一结点的子树中的所有结点是这个 结点的子孙。
2. 树的实现 ❖ 链表表示法
都被来自根 r 的一条有向边( edge)所连接。
Note: ➢ 子树是不相交的。因此树中的每一个节点都是一棵子
树的根。 ➢ 一棵有N个节点的树中有 N 1 条边。 ➢ 根节点通常画在上方。
§1 预备知识
1. 术语
节点的度(Degree)::= 节点的子树个数。 例如, degree(A) = 3, degree(F) = 0.
佛 教
一 般 性 技 术
计 算 机 软 件
电 子 模 拟 计 算
微 型 计… 算 机
机
计 算 机 的 应 用
宗 教 与 社 会 政
宗
教 与
…
科
学
破 除 迷 信
治
软程
编操
件 序… 译 作
工语
程系
程言
序统
§1 预备知识
【定义】树是一些节点的集合。这个集合可以是空集;若非 空,则树包含:
(1) 一个被称为根的特殊节点 r; (2) 以及0个或多个非空(子)树 T1, , Tk,每一棵子树的根
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
兄弟节点(sibling) ::= 具有同一父节点的各节点彼此是兄弟节点。
叶节点(leaf):= 度为0的节点 (没有孩子)。
§1 预备知识
从n1 到 nk 的路径 ::=从结点n1到nk的路径被 定义为一个结点序列n1 , n2 ,… , nk ,对于1 i k, ni是 ni+1的父结点。
}
❖ 后序遍历
void postorder ( tree_ptr tree ) { if ( tree ) {
for (each child C of tree ) postorder ( C );
visit ( tree ); } }
〖例2〗 计算一个目录的大小。
/usr 1
mark 1
alex 1