数据结构第六章06-1
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
25
图6-7 完全二叉树的顺序存储
2020/8/3
26
可采用增添一些并不存在的空结点的方 法,把一般的二叉树改造成为一棵完全二叉 树。
图6-8 把一般二叉树改造成完全二叉树
2020/8/3
27
这种为了实现顺序存储,用增添空结点 改造一般二叉树的方法,可能会造成大量存 储空间的浪费,最坏的情况出现在右单支树。
图6-5 两棵完全二叉树
2020/8/3
13
由完全二叉树的定义可知,满二叉树 一定是一棵完全二叉树,但完全二叉树却 不一定是一棵满二叉树。
2020/8/3
14
6.1.2 二叉树的性质
性质6-1~性质6-3对任何二叉树都成立, 性质6-4只是针对完全二叉树的。
性质6-1:在任何一棵二叉树的第i (i≥1)层上,最多有2i-1个结点。
2020/8/3
21
(1)如果i=1,则该结点为这棵完全 二叉树的根结点,它没有父结点;
(2)如果i>1,则该结点的父结点的 序号为i/2取整数(即i除以2后的整数 商);
2020/8/3
22
(3)如果2i>n,则序号为i的结点 没有左子树,否则其左孩子(即左子树 的根结点)的序号为2i;
(4)如果2i+1>n,则序号为i的结 点没有右子树,否则其右孩子(即右子 树的根结点)的序号为2i+1。
二叉树有如下的特征:
2020/8/3
4
• 二叉树可以是空的,空二叉树没有任何结 点; • 二叉树上的每个结点最多可以有两棵子树, 这两棵子树是不相交的; • 二叉树上一个结点的两棵子树有左、右之 分,次序是不能颠倒的。
2020/8/3
5
图6-1 二叉树的五种基本形态
2020/8/3
6
图6-2 两棵不同的二叉树
第6章 树与二叉树-1
6.1 二 叉 树 概 述
6.2 二 叉 树 的 存 储 结 构
6.3 遍 历 二 叉 树
6.4 哈 夫 曼 树 及 哈 夫 曼 编 码
2020/8/3
1
wk.baidu.com
本讲讨论二叉树,它是一种非常重要的
非线性数据结构,有着广泛的用途。
主要介绍以下几个方面的内容:
• 二叉树的定义及性质; • 二叉树的存储实现(顺序和链式存储); • 遍历二叉树(即对二叉树存储结点访问的 各种形式);
图6-3 一棵满二叉树
2020/8/3
11
图6-4所示的两棵二叉树都不是满二叉树。 虽然它们都满足“每个结点或都有两个非空 子树,或是叶结点”的条件,但却违背了 “每层都必须含有最多的结点个数”的要求。
图6-4 非满二叉树
2020/8/3
12
“完全二叉树”,是指该二叉树除最后 一层外,其余各层的结点都是满的,且最后 一层的结点都集中在左边,右边可连续缺少 若干结点。
把式(3)代入式(2),得:
n = n1 + 2×n2 + 1 (4)
综合式(1)和式(4),立即可以得出
所需要的结论。
2020/8/3
20
性质6-4:对于有n个结点的完全二叉树, 将其所有的结点按照从上到下、从左到右的 顺序进行编号。那么,二叉树中任意一个结 点的序号i(1≤i≤n)满足下面的关系:
2020/8/3
15
【证明】二叉树的第1层只有一个结点。
所以,当i=1时,2i-1=20=1成立。 假设结论对第i层成立,即第i层最多有
2i-1个结点。由于二叉树每个结点的度最多
为2,因此第i+1层结点的个数,最多应该是 第i层结点个数的2倍,即22i-1 = 2i,命题
得证。
2020/8/3
16
结点。如设二叉树种分支边数为m,那么
二叉树总的结点个数n应该是分支边数m加 上1(这个1是根结点),即:
n=m+1
(2)
2020/8/3
19
注意到每一条分支边或是由度为1的结
点发出,或是由度为2的结点发出,度为1的
结点发出一条边,度为2的结点发出两条边。
因此,又有关系:
m = n1 + 2×n2
(3)
2020/8/3
23
图6-6 被编号的完全二叉树
2020/8/3
24
6.2 二叉树的存储结构
6.2.1 二叉树的顺序存储结构
利用性质6-4,将完全二叉树中的结点以 编号为序存储在一维数组中,编号就是数组 元素的下标。这样,根据存储结点的下标, 就能得到它与完全二叉树中其他结点的邻接 关系。
2020/8/3
• 哈夫曼树及编码。
2020/8/3
2
6.1 二叉树概述 6.1.1 二叉树的基本概念
所谓“二叉树”,是一个由结点组成的 有限集合。这个集合或为空,或由一个称为 根的结点以及两棵不相交的二叉树组成,这 两棵二叉树分别称为根结点的左子树和右子 树。
2020/8/3
3
当二叉树非空时,通过结点间的边来 表示从一个结点到它的两个子结点间的联 系,这个结点称为父结点,两个子结点称 为父结点的孩子。
2020/8/3
17
性质6-3:如果一棵二叉树中,度为0的
结点个数为n0,度为2的结点个数为n2,则有 关系:n0 = n2 + 1。
【证明】设二叉树中度为1的结点个数为
n1,那么二叉树总的结点个数n应该是: n = n0 + n1 + n2 (1)
2020/8/3
18
另一方面,二叉树中除根结点外,其 余每个结点都有一个向上的分支指向其父
2020/8/3
9
所谓一个结点的“度”,是指该结点 拥有子树的个数。
对于二叉树来说,任何一个结点的度 最多是2。
通常,把二叉树中那些度为0的结点, 称作是“叶子”结点。
2020/8/3
10
“满二叉树”,是指该二叉树的每一个 结点,或是有两个非空子树的结点,或是叶 结点,且每层都必须含有最多的结点个数。
2020/8/3
7
从二叉树中的一个结点到达另一个结点 所经由的路线,称为一条“路径”。对于路 径来说,从开始结点到终止结点,中间经过 的分支个数,称为路径的“长度”。
2020/8/3
8
二叉树是一种层次结构。通常,把它的 根算作第1层,其余结点的层次值,为其父 结点所在层值加1。
一棵二叉树的“高度”,是指该二叉树 的最大层次数值。
性质6-2: 树高为k(k≥1)的二叉树,
最多有2k−1个结点。
【证明】由性质6-1可知,在树高为k的
二叉树里,第1层有20个结点,第2层有21个
结点,第3层有22个结点,……,第k层有2k1个结点。因此,要求出树高为k的二叉树的
结点个数,就是求和:
20 + 21 + 22 +…+ 2k-1=2k-1.证毕