计算机软件基础(自考10)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(1)将该二叉树还原成森林; (2)写出森林的先根遍历序列和后根遍历序列
a b d e h i j c f
g
(2)写出森林的先根遍历序列和后根遍历序列
解(1)将该二叉树还原成森林;
a b d e h i j c f
g
解(1)将该二叉树还原成森林;
a b d e h i j c f
a
c
f
பைடு நூலகம்
b
d
e
h
j
J
G
I L
J
K
B
E
M
M
F
四、树、森林和二叉树
4. 森林变二叉树(续)
A
B C E F D H G J
I
L
K
M
四、树、森林和二叉树
5. 森林的遍历 森林的遍历有:先序和后序 注意:
森林的先序遍历结果与对应二叉树的先序遍历结果相同;
森林的后序遍历结果与对应二叉树的中序遍历结果相同。
例.(2010.4解答)已知下图所示的二叉树,要求:
(4)双亲节点:指的是这个节点的父亲节点。 (5)树的高度=树的层数
二、二叉树
1. 二叉树:最多具有两个树杈的树。其中,左边的 树杈称为该节点的左子树,右边的树杈称为该节点 的右子树。 2. 二叉树的基本形态:共5种
一个 节点 也没 有
只有 一个 根节 点
只有左子 树
只有右子 树
左、右子 树都有
二、二叉树
二、二叉树
例10-1 试写出具有3个节点的所有不同形态的树和 二叉树。 树有2种:① ②
二叉树有五种:
二、二叉树
6. 二叉树的存储结构———顺序存储 操作步骤为: step1:现将二叉树变成完全二叉树(给有关节点补 够两个孩子,所补节点为虚拟节点,仅占个空间)
step2:将这个完全二叉树中各节点从上到下,逐层 由左向右一次存放到计算机连续空间中。
三、二叉树的遍历
1. 先序遍历 如果二叉树不为空,则依次执行如下操作:
(1)先:访问根节点; (2)再:先序遍历左子树;
左子树 (3)最后:先序遍历右子树。

右子树
三、二叉树的遍历
例:如图所示二叉树,试写出对其先序遍历的结果。 先序遍历结果: ABDEGHCFI
A B D E C
F
G
H
I
三、二叉树的遍历
12 7
3
17 10
4 2
五、哈夫曼树及其应用
4.哈夫曼树的性质 (1)给定权值树所对应的哈夫曼树不是唯一的, 但是,该树的带权路径长度WPL肯定是唯一的; (2)权值越大的节点,距离根节点越近; (3)哈夫曼树中,不存在只有一个孩子的节点; (4)哈夫曼树的节点总数n:=2×叶子节点个数-1。
五、哈夫曼树及其应用 5. 哈夫曼编码
五、哈夫曼树及其应用
例:(09.4月)给定一组权值:4、1、12、2、10,构 造对应的哈夫曼树(权值小的为左子树,权值大的 为右子树),并求出该树的带权路径长度。 3 、 4 、10 、12 17 7 step1:按权值由小到大排序: 1 、2 step2:取两个最小权值, 构建一颗二叉树 step3:从原序列中划去1和2 将3插入到序列中 step3:重复步骤1~3 1 29
(3)第i个叶子节点的带权路径长度WPLi: WPLi=Wi×Li; (4)树的带权路径长度WPL:等于该树中所有叶子 的带权路径长度之和。
五、哈夫曼树及其应用
2
2
4
9
5
9
9 2
4
5 4
5
4
5
2
9
五、哈夫曼树及其应用
2.哈夫曼树 哈夫曼树:也称为最优二叉树,就是带权路径长度为 最小的二叉树。 3.根据已知树,求对应哈夫曼树的方法
树的先序遍历结果与对应二叉树的先序遍历结果相同;
树的后序遍历结果与对应二叉树的中序遍历结果相同。
四、树、森林和二叉树
4. 森林变二叉树
step1: 把构成森林的每一棵树变成二叉树;
step2: 依次把后一棵二叉树连在前一棵二叉树根的 右子树上。
A A B E C D F H G H C I D L K
二、二叉树
6. 二叉树的存储结构———链式存储
(2)二叉树链式存储类型的定义
struct node { datatype data; struct node *Lchild,*Rchild;
};
二、二叉树
例10-5
A
A
^ ^
B
^
C
A A
D
^
A
^
三、二叉树的遍历
二叉树的遍历:按照一定的顺序访问树中所有节点, 而且每个节点仅被访问一次的操作。 1. 中序遍历 如果二叉树不为空,则依次执行如下操作: (1)先:中序遍历左子树; (2)再:访问根节点; (3)最后:中序遍历右子树。 左子树 根 右子树
二、二叉树
5. 二叉树的两种特殊情形: (1)满二叉树:除叶子节点以外,其它节点都有两个 孩子,而且叶子节点位于同一层上的二叉树。 注意:深度为k的满二叉树,有2k-1个节点
(2)完全二叉树:一个满二叉树的最下层,从右向左 连续缺少n个节点的二叉树。
满二叉树
完全二叉树
二、二叉树 例: (2010.4单选)一个深度为 k 的完全二叉树中 节点数至少有( )。 A 2k B 2k-1 C 2k+1 D 2k-1
口诀: 先序后序定树根; 中序区分左和右。
三、二叉树的遍历
例:(2010.4)已知二叉树的后序遍历序列是dabec, 中序遍历序列是debac,它的前序遍历序列 是 cedba 。
c e d b
a
三、二叉树的遍历
例10-7 已知二叉树的后序遍历序列和中序遍历序列结 果分别是DGHEBIFCA和DBGEHACIF,试确定这 个二叉树。
g
g
i
解(1)将该二叉树还原成森林;
a
c f
a b d
c e
f b
h
j
d
e
h
j
g
i
g
i
解(2)先根遍历序列:abdgcefhij
后根遍历序列:bgdaecihjf
a b d g i e h j
c
f
五、哈夫曼树及其应用
1. 几个基本术语
(1)第i个叶子节点的权值Wi:给第i个节点所赋予的 重要程度值; (2)第i个叶子节点的路径长度Li:从根到第i个节点 所经路径的段数;
1. 后序遍历 如果二叉树不为空,则依次执行如下操作:
(1)先:后序遍历左子树; (2)再:后序遍历右子树; (3)最后:访问根节点 。 左子树

右子树
三、二叉树的遍历
例:如图所示二叉树,试写出对其后序遍历的结果。 后序遍历结果: DGHEBIFCA
A B D E C
F
G
H
I
三、二叉树的遍历
结论:由先序和中序或后序和中序遍历结果,可以确 定唯一的一棵二叉树。
一、树(tree)
2. 树的表示形式
自然表示法
A
集合表示法
层次表示法
1A 1.1A
B
C
D
A
B
C
E F D
1.2B 1.2.1E 1.2.2F
E
F
1.3D
一、树(tree)
3. 树的有关名词 (1)节点的度:节点的孩子数。
(2)树的度=树的叉=拥有孩子最多节点的孩子个数 (3)叶子节点=终端节点=没有孩子的节点
44
d
1 23
0
27
56 0 13
e
f
1 29 0 7
c
1 16
a
1 9
a: 1110 b: 1111 c: 110 d: 00
e: 01 f: 10
b
3. 二叉树与一般树的区别:
一般树
树中至少有一个根节 点(n>0) 树的度≥0 不要求子树木顺序 (无序树)
二叉树
可以一个根节点都没 有(n ≥ 0) 树的度≤2 子树有左、右之分 (有序树)
二、二叉树
4. 二叉树的性质
性质1:二叉树的第 i 层上最多有2i-1个节点(i ≥ 1);
性质2:高度为 k 的二叉树最多有2k-1个节点(k ≥ 1) ; 性质3:任意一颗二叉树中,如果没有孩子的节点个数 为n0,有两个孩子的节点个数为n2,那么n0=n2+1
例:(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的编码。 step1:构造哈夫曼树
0
0 21 100 1
step2:构造哈夫曼编码树 step3:求各字符哈夫曼编码
A B D E C F
G
H
I
四、树、森林和二叉树
一、 树的存储结构
1、双亲静态链表存储法
A
序号
0 1 2 3 4 5
节点
A B C D E F
双亲
-1 0 0 0 2 2
B
E
C
D F
四、树、森林和二叉树
一、 树的存储结构
2、孩子链表存储法
data next
1 2 3
A
0
1
A
B C ^
^
B
E
C
D F
三、二叉树的遍历
例:如图所示二叉树,试写出对其中序遍历的结果。 中序遍历结果: DBGEHACIF
A B D E C
F
G
H
I
三、二叉树的遍历
中序遍历的算法描述 void inorde ( bitree *root) //root为指向根节点的指针 { if ( root != null ) { inorde (root -> Lchild); //先遍历左子树 printf ("%c", root ->data); //然后访问根节点 inorde ( root-> Rchild); //最后遍历右子树 } }
step1:将该树的叶子权值由小到大进行排序;
step2:从所排序中取出两个最小的权值 Wi 和Wi 1 构造 二叉树,该二叉树的根节点为W( W Wi Wi 1 ) step3:从权值序列中划去 Wi 和 Wi 1 。划去后,如果 序列为空,说明所要求的二叉树已经构成;否则, 将W加入权值序列中,重复step1~step3。
计算机 软件基础
第二篇 数据结构基础
第十章
树和二叉树
一、树(tree)
1. 树的定义
树:是一个具有n(n≥0)个节点的有限集合T。 满足以下两个条件: (1) 任意一颗树有且仅有一个特定的根节点(root node)。 (2)除根节点以外,其余节点可以分为m(m ≥0 ) 个互不相交的子集T1,T2, … Tm,其中每个子集本 身又是一颗树,称为根的子树。 结论:一棵树由若干子树构成,而每一颗子树由 若干颗子子树构成。
指向下一个兄弟
A
存储
^
C
^
B
E
^
E
^ ^ F ^ ^
D
四、树、森林和二叉树
一、 树的存储结构 1. 树变二叉树 step1:写出树的孩子兄弟表示; step2:将竖线变成左子树,横向变成右子树。
A A B E C A B C D F E F
D F
B
C D
E
四、树、森林和二叉树
3. 树的遍历 树的遍历有:先序和后序 注意:
二、二叉树
例10-2:
a b
c d 8 9 10 11 12 4 2 5 c 6 d 13 a 1 b 3 7
1
a
2
3 b
4
5
6 c
7
8
9
10
11
12
13
d
二、二叉树
例10-3 一个深度为K且只有K个节点的二叉树顺序存储 最多需要多少个存储空间,最少需要多少个。
二、二叉树
(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
Lchild——存放该节点左孩子的地址; Rchild——存放该节点右孩子的地址; data——存放该节点的数据;
2
4
5
^
3
4 5
D
E F
^
^ ^
四、树、森林和二叉树
3、孩子兄弟链式存储法 1)树的孩子兄弟表示
口诀:竖线连接左孩子,横线连接亲兄弟。 例:将如图所示树,用树的孩子兄弟表示。
A
A B B E C D F E F C D
四、树、森林和二叉树
3、孩子兄弟链式存储法 2)用链连接各节点。 指向大孩子
A B C D F date
(1)定义:长度最小的二进制串电文编码。
(2)求哈夫曼编码的步骤: step1:构造哈夫曼树(依据:以电文中各字符出现的 次数为权值);
step2:构造哈夫曼编码树(方法:在哈夫曼树左子 树的边上添0,右子树的边上添1);
step3:求各字符的哈夫曼编码(从根到各字符节点 路径上的二进制序列);
五、哈夫曼树及其应用
相关文档
最新文档