计算机软件基础(自考本科)(1.10)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
step2:取两个最小权值, 构建一颗二叉树
step3:从原序列中划去1和2 将3插入到序列中
step3:重复步骤1~3
29 12 17
7 10 34
1
2
五、哈夫曼树及其应用
4.哈夫曼树的性质 (1)给定权值树所对应的哈夫曼树不是唯一的,
但是,该树的带权路径长度WPL肯定是唯一的;
(2)权值越大的节点,距离根节点越近;
3D ^
4E ^
5F ^
2
3^
5^
四、树、森林和二叉树
3、孩子兄弟链式存储法 1)树的孩子兄弟表示
口诀:竖线连接左孩子,横线连接亲兄弟。 例:将如图所示树,用树的孩子兄弟表示。
A B CD
EF
A
B
C
D
E
F
四、树、森林和二叉树
3、孩子兄弟链式存储法
2)用链连接各节点。 指向大孩子
date
A
A^
B
C
三、二叉树的遍历
1. 先序遍历
如果二叉树不为空,则依次执行如下操作:
(1)先:访问根节点; 根
(2)再:先序遍历左子树;
(3)最后:先序遍历右子树。左子树
右子树
三、二叉树的遍历
例:如图所示二叉树,试写出对其先序遍历的结果。
先序遍历结果: ABDEGHCFI
A
B
C
D
E
F
G
HI
三、二叉树的遍历
1. 后序遍历
h
i
j
(2)写出森林的先根遍历序列和后根遍历序列 解(1)将该二叉树还原成森林;
Байду номын сангаас
a b
de g
c f
h
i
j
解(1)将该二叉树还原成森林;
a
b
c
de
f
g
h
i
j
a
c
f
bd
e
h
j
g
i
解(1)将该二叉树还原成森林;
a
c
f
bd
e
h
j
g
i
a
c
f
b
de
h
j
g
i
解(2)先根遍历序列:abdgcefhij 后根遍历序列:bgdaecihjf
二、二叉树
(2)完全二叉树节点顺序编号的意义
1
2
3
4
5
6
7
8
9 10
二、二叉树
例10-4 一个完全二叉树节点个数为1000,则n0、n1、n2 和高度h各为多少?
1
2
3
4
5
6
7
8
9 10
二、二叉树
6. 二叉树的存储结构———链式存储 (1)二叉树链式存储中,每个节点有3个成员(域)
Lchild data Rchild
二、二叉树
5. 二叉树的两种特殊情形: (1)满二叉树:除叶子节点以外,其它节点都有两个 孩子,而且叶子节点位于同一层上的二叉树。
注意:深度为k的满二叉树,有2k-1个节点 (2)完全二叉树:一个满二叉树的最下层,从右向左 连续缺少n个节点的二叉树。
满二叉树
完全二叉树
二、二叉树
例: (2010.4单选)一个深度为 k 的完全二叉树中 节点数至少有( )。
(3)哈夫曼树中,不存在只有一个孩子的节点;
(4)哈夫曼树的节点总数n:=2×叶子节点个数-1。
五、哈夫曼树及其应用
5. 哈夫曼编码
(1)定义:长度最小的二进制串电文编码。
(2)求哈夫曼编码的步骤:
step1:构造哈夫曼树(依据:以电文中各字符出现的 次数为权值);
step2:构造哈夫曼编码树(方法:在哈夫曼树左子 树的边上添0,右子树的边上添1);
五、哈夫曼树及其应用
2
2
4
9
59 9
2
45
45 4
5
29
五、哈夫曼树及其应用
2.哈夫曼树
哈夫曼树:也称为最优二叉树,就是带权路径长度为 最小的二叉树。
3.根据已知树,求对应哈夫曼树的方法
step1:将该树的叶子权值由小到大进行排序;
ste二p2叉:树从,所该排二序叉中树取的出根两节个点最为小W的(权值WW W i i和W W ii11 构)造 step3:从权值序列中划去 W i 和 W i1 。划去后,如果
计算机 软件基础
第二篇 数据结构基础
第十章 树和二叉树
一、树(tree)
1. 树的定义
树:是一个具有n(n≥0)个节点的有限集合T。 满足以下两个条件: (1) 任意一颗树有且仅有一个特定的根节点(root node)。 (2)除根节点以外,其余节点可以分为m(m ≥0 ) 个互不相交的子集T1,T2, … Tm,其中每个子集本 身又是一颗树,称为根的子树。
5. 森林的遍历 森林的遍历有:先序和后序 注意: 森林的先序遍历结果与对应二叉树的先序遍历结果相同; 森林的后序遍历结果与对应二叉树的中序遍历结果相同。
例.(2010.4解答)已知下图所示的二叉树,要求: (1)将该二叉树还原成森林; (2)写出森林的先根遍历序列和后根遍历序列
a b
de g
c f
A
B
D
E
C F
GH
I
四、树、森林和二叉树
一、 树的存储结构 1、双亲静态链表存储法
A B CD
EF
序号 0 1 2 3 4 5
节点 A B C D E F
双亲 -1 0 0 0 2 2
四、树、森林和二叉树
一、 树的存储结构 2、孩子链表存储法
A B CD
EF
data next
0A
1
1B ^
2C
4
四、树、森林和二叉树
4. 森林变二叉树
step1: 把构成森林的每一棵树变成二叉树;
step2: 依次把后一棵二叉树连在前一棵二叉树根的 右子树上。
A
G
J
A
G
J
B
H
K
BCD H I K
C
IL
EF
E
D
M
LM
F
四、树、森林和二叉树
4. 森林变二叉树(续)
A B
C E
F
G
H
J
D
I
K
L
M
四、树、森林和二叉树
如果二叉树不为空,则依次执行如下操作:
(1)先:后序遍历左子树; 根
(2)再:后序遍历右子树;
(3)最后:访问根节点 。 左子树
右子树
三、二叉树的遍历
例:如图所示二叉树,试写出对其后序遍历的结果。
后序遍历结果: DGHEBIFCA
A
B
C
D
E
F
G
HI
三、二叉树的遍历
结论:由先序和中序或后序和中序遍历结果,可以确 定唯一的一棵二叉树。
序列为空,说明所要求的二叉树已经构成;否则, 将W加入权值序列中,重复step1~step3。
五、哈夫曼树及其应用
例:(09.4月)给定一组权值:4、1、12、2、10,构 造对应的哈夫曼树(权值小的为左子树,权值大的 为右子树),并求出该树的带权路径长度。
step1:按权值由小到大排序: 1 、23 、74 、10 、12 17
口诀: 先序后序定树根;
中序区分左和右。
三、二叉树的遍历
例:(2010.4)已知二叉树的后序遍历序列是dabec, 中序遍历序列是debac,它的前序遍历序列 是 cedba 。
c
e
d
b
a
三、二叉树的遍历
例10-7 已知二叉树的后序遍历序列和中序遍历序列结 果分别是DGHEBIFCA和DBGEHACIF,试确定这 个二叉树。
step1:构造哈夫曼树
step2:构造哈夫曼编码树
0 100 1
44 01
21 23
de
0 56 1
27 29
f0 1
13 16
c0 1
79
ab
step3:求各字符哈夫曼编码
a: 1110 b: 1111 c: 110 d: 00
e: 01 f: 10
^ D 存储
B
C
E
F
^E
指向下一个兄弟
^D ^ ^F ^
四、树、森林和二叉树
一、 树的存储结构
1. 树变二叉树 step1:写出树的孩子兄弟表示; step2:将竖线变成左子树,横向变成右子树。
A
A
A
B
B CD
B
C
D
C
EF
E
F
E
D
F
四、树、森林和二叉树
3. 树的遍历 树的遍历有:先序和后序 注意: 树的先序遍历结果与对应二叉树的先序遍历结果相同; 树的后序遍历结果与对应二叉树的中序遍历结果相同。
树的度≥0
可以一个根节点都没 有(n ≥ 0)
树的度≤2
不要求子树木顺序 (无序树)
子树有左、右之分 (有序树)
二、二叉树
4. 二叉树的性质
性质1:二叉树的第 i 层上最多有2i-1个节点(i ≥ 1);
性质2:高度为 k 的二叉树最多有2k-1个节点(k ≥ 1) ;
性质3:任意一颗二叉树中,如果没有孩子的节点个数 为n0,有两个孩子的节点个数为n2,那么n0=n2+1
结论:一棵树由若干子树构成,而每一颗子树由 若干颗子子树构成。
一、树(tree)
2. 树的表示形式
自然表示法
集合表示法
A
B
C
D
A B C EFD
E
F
层次表示法
1A 1.1A 1.2B 1.2.1E 1.2.2F 1.3D
一、树(tree)
3. 树的有关名词 (1)节点的度:节点的孩子数。 (2)树的度=树的叉=拥有孩子最多节点的孩子个数 (3)叶子节点=终端节点=没有孩子的节点 (4)双亲节点:指的是这个节点的父亲节点。 (5)树的高度=树的层数
a b
de g
c f
h
i
j
五、哈夫曼树及其应用
1. 几个基本术语
(1)第i个叶子节点的权值Wi:给第i个节点所赋予的 重要程度值;
(2)第i个叶子节点的路径长度Li:从根到第i个节点 所经路径的段数;
(3)第i个叶子节点的带权路径长度WPLi: WPLi=Wi×Li;
(4)树的带权路径长度WPL:等于该树中所有叶子 的带权路径长度之和。
};
例10-5
B C
D
二、二叉树
A
A^
^A A^
^ A^
三、二叉树的遍历
二叉树的遍历:按照一定的顺序访问树中所有节点, 而且每个节点仅被访问一次的操作。
1. 中序遍历 如果二叉树不为空,则依次执行如下操作:
(1)先:中序遍历左子树;
根
(2)再:访问根节点; (3)最后:中序遍历右子树。 左子树
右子树
step2:将这个完全二叉树中各节点从上到下,逐层 由左向右一次存放到计算机连续空间中。
二、二叉树
例10-2:
a
a1
b c
d
2
b3
4
5 c6
7
d 8 9 10 11 12 13
1 2 3 4 5 6 7 8 9 10 11 12 13
a
b
c
d
二、二叉树
例10-3 一个深度为K且只有K个节点的二叉树顺序存储 最多需要多少个存储空间,最少需要多少个。
A 2k
B 2k-1
C 2k+1
D 2k-1
二、二叉树
例10-1 试写出具有3个节点的所有不同形态的树和 二叉树。
树有2种:①
②
二叉树有五种:
二、二叉树
6. 二叉树的存储结构———顺序存储
操作步骤为:
step1:现将二叉树变成完全二叉树(给有关节点补 够两个孩子,所补节点为虚拟节点,仅占个空间)
三、二叉树的遍历
例:如图所示二叉树,试写出对其中序遍历的结果。
中序遍历结果: DBGEHACIF
A
B
C
D
E
F
G
HI
三、二叉树的遍历
中序遍历的算法描述
void inorde ( bitree *root) //root为指向根节点的指针 {
if ( root != null ) {
inorde (root -> Lchild); //先遍历左子树 printf ("%c", root ->data); //然后访问根节点 inorde ( root-> Rchild); //最后遍历右子树 } }
二、二叉树
1. 二叉树:最多具有两个树杈的树。其中,左边的 2. 树杈称为该节点的左子树,右边的树杈称为该节点 3. 的右子树。 2. 二叉树的基本形态:共5种
一个 节点 也没 有
只有 一个 根节 点
只有左子 只有右子
树
树
左、右子 树都有
二、二叉树
3. 二叉树与一般树的区别:
一般树
二叉树
树中至少有一个根节 点(n>0)
Lchild——存放该节点左孩子的地址; Rchild——存放该节点右孩子的地址; data——存放该节点的数据;
二、二叉树
6. 二叉树的存储结构———链式存储 (2)二叉树链式存储类型的定义
struct node
{ datatype data;
struct node *Lchild,*Rchild;
step3:求各字符的哈夫曼编码(从根到各字符节点 路径上的二进制序列);
五、哈夫曼树及其应用
例:(2008.04)假设字符a,b,c,d,e,f使用的频率分别为 0.07,0.09,0.13,0.21,0.23,0.27,构造哈夫曼编码树(权 值小的为左子树,权值大的为右子树),并根据哈夫曼编码树 写出a,b,c,d,e,f的编码。