当前位置:文档之家› 离散数学 图论-树

离散数学 图论-树


中序遍历(次序:左-根-右) 前序遍历(次序:根-左-右) 后序遍历(次序:左-右-根) b 中序遍历: c b e d g f a I k h j 前序遍历: a b c d e f g h i k j 后序遍历: c e g f d b k i j h a
例:给定二叉树,写出三种访问 结点的序列
是否为根树
(a) (no)
(b) (no)
(c) (yes)
从树根到T的任意顶点v的通 路(路径)长度称为v的层数。 v5的层数为 层。
层数最大顶点的层数称为树 高.将平凡树也称为根树。 右图中树高为( )。
v1
v2 v3
v4 v8v5Fra bibliotekv6v7 v10
v9
在根树中,由于各有向边的方向是一 致的,所以画根树时可以省去各边上的所 有箭头,并将树根画在最上方.
等长码:0-000;1-001;2-010;3-011;4-100; 5-101;6-110;7-111. 总权值: W2=3*100=300
4、二叉树的周游(遍历)
二叉树的周游:对于一棵二叉树的每一个结点都访问一次且 仅一次的操作 1)做一条绕行整个二叉树的行走路线(不能穿过树枝) 2)按行走路线经过结点的位臵(左边、下边、右边) 得到周游的方法有三种: 中序遍历(路线经过结点下边时访问结点) 访问的次序:左子树-根-右子树 前序遍历(路线经过结点左边时访问结点) 访问的次序:根-左子树-右子树 后序遍历(路线经过结点右边时访问结点) 访问的次序:左子树-右子树-根
2、根树中顶点的关系
定义:设T为一棵非平凡的根树, v2 ∀vi,vj∈V(T),若vi可达vj,则称vi为 vj的祖先,vj为vi的后代; v4 v5 若vi邻接到vj(即<vi,vj>∈E(T),称 vi为vj的父亲,而vj为vi的儿子 v8 若vj,vk的父亲相同,则称vj与vk是兄 弟
v1
3、前缀编码 在通信中,常用二进制编码表示符号. 1, 10, 01, 101, 0101 1)等长编码与不等长编码: a, b, c , d , e 不等长编码可以使总电文总长度较短 2)不等长编码中编码的问题:如何识别? 3) 前缀编码定义:设a1a2,…,an-1an为长为n的符号串, 称其子串a1, a1a2, …, a1a2…an-1分别为该符号串的 长度为1, 2, …, n-1的前缀. 设A={b1,b2,…bm }为一个符号串集合,若对于任意的bi, bj∈A (i≠ j) bi与bj互不为前缀,则称A为前缀码. 若符号串bi(i=1,2,…,m)中只出现0,1两个符号,则 称A为二元前缀码 {1,10,101,0101,1010,0100,01001 }不是前缀码 {1,00,011,0101,01001,01000 } 为前缀码. { 1,01,111,1100,0111 } 不是前缀码
a h d i j
c
例:无向树T中度为4、3、2的结点各一个,其余为树叶,树叶=? 4+3+2+k = 2(3+k-1)
4) 阶数n比较小的所有非同构的无向树. 例1:画出6阶所有非同构的无向树. m=n-1=5 从树的节点之和来分析:结点之和为10分配给6个结点 1 1 1 1 1 5 1 1 1 1 2 4 1 1 1 1 3 3 1 1 1 2 2 3 1 1 2 2 2 2 例2:7阶无向树中有3片树叶和1个3度顶点,其余3个顶点的度数均无1和3.试 画出满足要求的所有非同构的无向树. 解答:从树的节点之和来分析:7阶无向树的边数m = ( ), 于是∑d(vi)=12=3+3 + d(v5)+d(v6)+d(v7) 1 1 1 2 2 2 3 加入2,2,2 如何组成结点的度数序列使之不同构 主要分析:度为3的结点v与其三个邻接点的关系 邻接关系不同就能得到不同构的树 三个邻接点度数:1 1 2 1 2 2 2 2 2
通路长度).
在所有有t片树叶,带权w1,w2,…,wt的二叉树中, 总权值W(T)最小的二叉树称为最优二叉树 三棵带权二叉树
W(T1)=2(2+2)+3*3+5*3+3*2=38 W(T2)=4(3+5)+3*3+2*2+2=47 W(T3)=3*(3+3)+5*2+2(2+2)=36
2.Huffman算法(在给定权值下,如何构造最优二叉树) 给定实数(权值):w1,w2,…,wt,按从小到大 排序为w1≤w2≤…≤wt. (1) 连接权为w1,w2的两片树叶,得一个分支点,其权 为w1+w2 (2) 在w1+w2,w3,w4…,wt中选出两个权最小的, 连接它们对应的顶点(不一定是树叶),得新分支点及 所带的权. (3) 重复(2),直到形成t-1个分支点,t片树叶为止.
v1
v2 v4 v8 v5
二叉 v3 有序 v6 v7 树
v10
v1
v2 v4 v5 v3
v6 v7
v9
v8 v9 v10 v11 v12 v13 v14 v15
二叉 完全 正则 有序 树
(a)
(b)
(c)
四叉树
4、r叉树的子树
定义: 设T为一棵根树,∀v∈ V(T),
称v及其后代的导出子图Tv为T的以v为根的根子树.
(5)G中没有回路,但在任何两个不同的顶点之间加一条新边,在所得图中得到 惟一的一个含新边的初级回路. (6)G是连通的,但删去任何一条边后,所得图不连通. G连通:若存在二个结点无通路,则在二个结点添加边后不会出现回路
3)树的性质
对于给定的无向图—树是边数最小的连通图(m<n-1则不连通) 树是边数最多的无回路图(m>n-1则有回路) 结点的度: Σd(vi) = 2m =2(n-1) 定理:设T是n阶非平凡的无向树,则T中至少有 设:有x片树叶,其余结点度数至少为2 x + 2(n-x) <= 2(n-1) 片树叶
等长的编码一定不是最好的,考虑利用二元前缀码。
3)最优二元前缀码 给定所需编码的字符的频率,构造字符的二元前缀 编码,使其总电文长度为最短-称为最优二元前缀 码。
先利用哈夫曼算法,生成最优二叉树;
再得到最优二元前缀码
例:传输100个八进制的数字,其出现的频率分别为: 0-25%, 1-20%, 2-15%, 3-10%, 4-10%, 5-10%, 6-5%, 7-5%。 用最优二元前缀码传输需要多少二进制数字? 用等长码传输需要多少二进制数字? 先得到最优二元前缀码 利用哈夫曼算法, 生成最优二叉树, 以频率为权值, 5,5,10,10,10,15,20,25 6,7,3, 4, 5, 2, 1, 0
2)利用二叉树产生二元前缀码 规定二叉树的左子树的边为0,右子树的边为1
则将从根到叶子结点的通路中边的序列即为叶子 的二元前缀编码
0 0 a b 0 1 1 0 1
a: b: c: d: e:
00 010 011 10 111
d 1
c
1 e
通信中,每个字符出现的频率不同,如何使得 传输效率最高?
3、带权图的最小生成树
(1) 定义5 设无向连通带权图G=<V,E,W> ,T是G的一棵生成树. T的各边权之和称为T的权,记作W(T); G的所有生成树中权最小的生成树称为G的最小生成树。 (2) 最小生成树的求法(这里介绍避圈法Kruskal算法) 设n阶无向连通带权圈G=<V,E, W> 有m条边, 不妨设G中没有环(否则,可以将所有的环先删去),将m条边按权从小到 大顺序排列,设为e1,e2,…,em; 取e1在T中,然后依次检查e2,e3,…,em.若ej(j≥2)与已在T中的边 不能构成回路,则取ej在T中,否则弃去ej; 算法停止时得到的T为G的最小生成树。
例: 求2,2,3,3,5的最优二叉树
例: 求2,2,3,3,5的最优二叉树 (1) 2,2,3,3,5 (2) 3,3,4,5 (3) 4,5,6 (4) 6,9
3 3 2 2 9 6 4 5 3 15 6 3
最优二叉树总的原则是:权值较大的叶子距根较近, 权值较小的可以距根较远
例:给定一组权值3,5,6,9,11,14,16,18构造 相应的最优二叉树
v3 v6 v7 v10
v9
v1为v5的祖先,v5为v1的后代; v2为v5的父亲,而v5为v2的儿子; v4与v5是兄弟
3、有序树 设T为根树,若将T中层数相同的顶点都标定次序, 则称T为有序树 根据根树T中每个分支点儿子数以及是否有序,可 以将根树分成下列各类: (1)若T的每个分支点至多有r个儿子,则称T为r叉树; 又若r叉树是有序的,则称它为r叉有序树. (2)若T的每个分支点都恰好有r个儿子,则称T为r叉正 则树; 又若T是有序的,则称它为r叉正则有序树. (3)若T是r叉正则树,且每个树叶的层数均为树高,则 称T为r叉完全正则树, 又若T是有序的,则称它为r叉完全正则有序树。
0 6
7 3
4
5
2
1
5,5,10,10,10,15,20,25 6,7,3, 4, 5, 2, 1, 0 编码:6-0000;7-0001; 3-001;4-010;5-011; 2-100;1-101,0-11
0
6 7 3 4 5 2 1
总权值:(100个字符的bit数)
W(T)=(5+5)*4+(10+10+10+15+20)*3+25*2=285
避圈法Kruskal算法(n-1次)
1
(1) 5 2 1
2 1 (2)
2 1 (3)
4
4
(4)
破圈法
3
5 2 1
(1)
64
3
5 2 1
相关主题