数据结构第7章 树形结构一

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

树的双亲存储结构示意图
双亲存储结构的类型声明如下:
typedef struct { ElemType data; //节点的值 int parent; //指向双亲的位置
0 1 2 3 4 5 6 A B C D E F G (b) -1 0 0 0 2 2 2
} PTree[MaxSize];
思考题:该存储结构的优缺点?
3. 孩子兄弟链存储结构 孩子兄弟链存储结构是为每个节点设计三个域:一个数 据元素域,一个该节点的第一个孩子节点指针域,一个该 节点的下一个兄弟节点指针域。
A B D E G F C

A ∧ B D
∧ ∧
C ∧ E G ∧

F ∧
树的孩子兄弟链存储结构示意图
兄弟链存储结构中节点的类型声明如下:
typedef struct tnode { ElemType data; struct tnode *hp; struct tnode *vp; } TSBNode;
B C D
E K L
F
G
H M
I
J
7.1.6 树的存储结构
1. 双亲存储结构
这种存储结构是一种顺序存储结构,用一组连续空间 存储树的所有节点,同时在每个节点中附设一个伪指针指 示其双亲节点的位置。
A B E C F (a) D G 0 1 2 3 4 5 6 A B C D E F G (b) -1 0 0 0 2 2 2
A(B(E,F),C(G(J)),D(H,I(K,L,M)))
B
A C F G J H K
D
I L M
括号表示法
E
7.1.3 树的基本术语
A
度为3 度为2 D H K I L M
1. 节点的度与树的度:树中某
个节点的子树的个数称为该节点的 度。树中各节点的度的最大值称为 树的度,通常将度为 m 的树称为 m 次树。
A C G H
1
D
2 I 3
J
K
L
M 4
7. 森林: n( n > 0 )个互不相交的树的集合称为森 林。森林的概念与树的概念十分相近,因为只要把树的 根节点删去就成了森林。反之,只要给 n棵独立的树加 上一个节点,并把这 n棵树作为该节点的子树,则森林 就变成了树。
7.1.4 树的性质
性质1 树中的节点数等于所有节点
B E
A C F (a) D G
2. 孩子链存储结构
孩子链存储结构可按树的度(即树中所有节点度的最大值) 设计节点的孩子节点指针域个数。以下左图的树对应的孩子链 存储结构如右图所示。
A A B B D E G F G ∧ ∧ ∧ C D ∧ ∧ ∧ E
∧ ∧ ∧
C ∧ ∧ ∧ F ∧ ∧ ∧
树的孩子链存储结构示意图
由树的性质2可推出。 性质3 高度为h的二叉树至多有2h-1个节点(h≥1)。
1
由树的性质3可推出。
4 D 8 H
A C 3 7 F 11 12 K L 13 14 M N G 15 O
2 B 5 E 9 10 I J 6
满二叉树
性质4 对完全二叉树中编号为i的节点(1≤i≤n,n≥1,n 为节点数)有:
第7章 树和二叉树
7.1 树的基本概念 7.2 二叉树概念和性质 7.3 二叉树存储结构 7.4 二叉树的遍历 7.5 二叉树的基本运算及其实现 7.6 二叉树的构造 7.7 线索二叉树 7.8 哈夫曼树
本章小结
客观世界中许多事物存在层次关系 • 人类社会家谱 • 社会组织结构 • 图书信息管理
( 1 )若 i≤n/2 ,即 2i≤n ,则编号为 i 的节点为分支节点, 否则为叶子节点。 (2)若n为奇数,则每个分支节点都既有左孩子节点, 也有右孩子节点;若 n为偶数,则编号最大的分支节点只有 左孩子节点,没有右孩子节点,其余分支节点都有左、右孩 1 A 子节点。
i/2 i
4 D E 9 10 I J 11 12 K L 2 B 5 6 F 13 14 M N G 15 O C 3 7
2 B 4 D 8 H I 9 10 J E 11 12 K L 5 6 F 13 14 M N G 15 O C 3 7
满二叉树
若二叉树中最多只有最下面两层的节点的度数可以小于 2, 并且最下面一层的叶节点都依次排列在该层最左边的位置上, 则这样的二叉树称为完全二叉树。 如下图所示为一棵完全二叉树。同样可以对完全二叉树中每 个节点进行连续编号,编号的方法同满二叉树相同。图中每个 节点外边的数字为对该节点的编号。
孩子链存储结构的节点类型声明如下:
typedef struct node { ElemType data; struct node *sons[MaxSons]; } TSonNode; //节点的值 //指向孩子节点
其中,MaxSons为最多的孩子节点个数。
思考题:有多少个空指针域?
思考题:该存储结构的优缺点?
对于第一层,因为树中的第一层上只有一个节点,即整个树的 根节点 , 而由 i=1 代入 mi-1 ,得 mi-1=m1-1=1 ,也同样得到只有一个 节点,显然结论成立。 假设对于第(i-1)层(i>1)命题成立,即度为m的树中第(i-1) 层上至多有mi-2个节点。
则根据树的度的定义,度为m的树中每个节点至多有 m个孩 子节点,所以第 i 层上的节点数至多为第 (i-1) 层上节点数的 m 倍, A 即至多为mi-2×m=mi-1个,这与命题相同,故命题成立。
求解方法归纳
求解树的节点个数问题:对于度为m的树,在n、n0、n1、 n2、…、nm中只有两个参数未知时,一般可求出这两个值。 例如求n和n0的求解过程如下:
n=n0+n1+…+nm 度之和=n-1 度之和=n1+2n2+…+mnm 所以有:n=n1+2n2+…+mnm+1=n0+n1+…+nm
这样:n0=n2+…+(m-1)nm+1
E B F
A C G J H K D I L M
的度数加1。
证明:根据树的定义,在一棵树中, 除树根节点外,每个节点有且仅有一 个前驱节点。也就是说,每个节点与 指向它的一个分支一一对应,所以除 树根之外的节点数等于所有节点的分 支数(度数),从而可得树中的节点 数等于所有节点的度数加1。
度之和=分支数 分支数=n-1 所以,n=度之和+1
0 2
B D G E
C F
求解方法归纳
求解二叉树的节点个数问题:通常利用二叉树的性质1,即 n0=n2+1来求解这类问题,也常利用以下关系求解: n=n0+n1+n2 度之和=n-1 度之和=n1+2n2 所以有: n=n1+2n2
性质2
非空二叉树上第i层上至多有2i-1个节点,这里应有
i≥1。
//节点的值 //指向兄弟 //指向孩子节点
每个节点固定只有两个指针域。
思考题:该存储结构的优缺点?
7.2 二叉树概念和性质
7.2.1 二叉树概念
二叉树是有限的节点集合。 这个集合或者是空。 或者由一个根节点和两棵互不相交的称为左子树和右 子树的二叉树组成。
注意:二叉树的定义是一种递归定义。
C 文件夹1 文件夹n 文件1 文件2
文件夹11 文件夹12
文件11 文件12
7.1 树的基本概念
7.1.1 树的定义
形式化定义:
树:T={D,R}。D是包含n个节点的有穷集合(n≥0)。 当n=0时为空树,否则关系R满足以下条件:
有且仅有一个节点d0∈D,它对于关系R来说没 有前驱节点,节点d0称作树的根节点。 除节点d0外,D中的每个节点对于关系R来说都 有且仅有一个前驱节点。 D中每个节点对于关系R来说可以有零个或多个 后继节点。
A C G H
D
I
J
K
L
M
A到K的路径为A,D,I,K,
其长度为3
4. 孩子节点、双亲节点和兄弟节 点:在一棵树中,每个节点的后继, 被称作该节点的孩子节点(或子女节 点)。相应地,该节点被称作孩子节 点的双亲节点(或父母节点)。 具有同一双亲的孩子节点互为兄弟 节点。进一步推广这些关系,可以把 每个节点的所有子树中的节点称为该 节点的子孙节点。 从树根节点到达该节点的路径上经 过的所有节点被称作该节点的祖先节 点。
B E F
C G J
2. 分支节点与叶节点:度不为零的节点称为非终端节点 , 又叫分支节点。度为零的节点称为终端节点或叶节点。在分 支节点中,每个节点的分支数就是该节点的度。如对于度为 1的节点,其分支数为1,被称为单分支节点;对于度为 2的节 点,其分支数为2,被称为双分支节点,其余类推。
3. 路径与路径长度:对于任意 两个节点 di 和 dj ,若树中存在一个节 点序列 di,di1,di2,…,din,dj ,使得序列中 除di外的任一节点都是其在序列中的 B 前一个节点的后继,则称该节点序 F 列为由 di 到 dj 的一条路径,用路径所 E 通 过的 节 点 序 列 (di,di1,di2,…,dj) 表示 这条路径。 路径长度等于路径所通过的节点 数目减1(即路径上分支数目)。
二叉树的五种基本形态: 空树 只含根节点
N
右子树为空树 左子树为空树
左右子树均 不为空树
N
N
N R
L
L
R
二叉树是可以采用树的逻辑结构表示法,其四种表示
法也都适用: 树形表示法 文氏图表示法 凹入表示法
括号表示法
在一棵二叉树中,如果所有分支节点都有左孩子节点和右孩 子节点,并且叶节点都集中在二叉树的最下一层,这样的二叉 树称为满二叉树。 下图所示就是一棵满二叉树。可以对满二叉树的节点进行 连续编号,约定编号从树根为 1开始,按照层数从小到大、同 一层从左到右的次序进行。图中每个节点外边的数字为对该节 1 点的编号。 A
A C B E F G I L K M E D H A
B
F
C G J H
D
I K L M
J
逻辑结构表示2
(3)凹入表示法。使用线段的伸缩描述树结构。下 图是树的凹入表示法。
A
B
E F
C G J H
Biblioteka Baidu
D
I K L M
逻辑结构表示3
(4)括号表示法。将树的根节点写在括号的左边,除 根节点之外的其余节点写在括号中并用逗号间隔来描述 树结构。下图是树的括号表示法。
A B F C G J H K D I L M
E
5. 节点的层次和树的高度:树 中的每个节点都处在一定的层次上。 节点的层次从树根开始定义,根节 点为第1层,它的孩子节点为第2层, 以此类推 , 一个节点所在的层次为 B 其双亲节点所在的层次加 1 。树中 E F 节点的最大层次称为树的高度(或 树的深度)。 6. 有序树和无序树:若树中各 节点的子树是按照一定的次序从左 向右安排的,且相对次序是不能随 意变换的,则称为有序树,否则称 为无序树。
1 2 B 4 D 8 H I 9 10 J E 11 K 5 6 F G C A 3 7
完全二叉树
7.2.2 二叉树性质
性质1 非空二叉树上叶节点数等于双分支节点数加1。 证明:设二叉树上叶节点数为 n0 ,单分支节点数为 n1 ,双 分支节点数为 n2,则总节点数 n=n0+n1+n2。在一棵二叉树中, 所有节点的分支数(即度数)应等于单分支节点数加上双分支 节点数的2倍,即总的分支数=n1+2n2。 由于二叉树中除根节点以外,每个节点都有唯一的一个分支 指向它,因此二叉树中有:总的分支数=总节点数-1。 由上述三个等式可得:n1+2n2=n0+n1+n2-1 A 即:n =n +1
递归定义:
树是由n(n≥0)个节点组成的有限集合(记为T)。其中: 如果n=0,它是一棵空树,这是树的特例; 如果n>0,这n个节点中存在(有仅存在)一个节点 作为树的根节点,简称为根节点(root),其余节点 可分为m (m>0)个互不相交的有限集T1,T2,…,Tm, 其中每一棵子集本身又是一棵符合本定义的树,称 为根root的子树。
例:一棵度为4的树T中,若有20个度为4的节点,10个
度为3的节点,1个度为2的节点,10个度为1的节点,则树T
的叶子节点个数是 A.41 C.113 注:本题为2010年全国考研题 。 B.82 D.122
性质 2 i≥1。
度为m 的树中第 i 层上至多有 mi-1 个节点,这里应有
证明(采用数学归纳法)
root
T1
T2

Tm
7.1.2 树的表示
(1)树形表示法。这是树的最基本的表示,使用一棵倒 置的树表示树结构,非常直观和形象。下图就是采用这种表 示法。
A C F G J H K
B
E
D
I L M
逻辑结构表示1
(2)文氏图表示法。使用集合以及集合的包含关系描述树结 构。下图就是树的文氏图表示法。
相关文档
最新文档