目录
主要内容
例1
例2
避圈法(Kruskal)
例3
求最优树的算法—— Huffman算法
例4
例
例
存放规则
例
波兰符号法
逆波兰符号法
主要内容
无向树及其性质生成树根树及其应用
定义11.1
(1) 无向树 —— 连通无回路的无向图(2) 平凡树 —— 平凡图(3) 森林 —— 至少由两个连通分支(每个都是树)组成(4) 树叶 ——1 度顶点(5) 分支点 —— 度数 ≥ 2 的顶点
定理 11.1 设 G =< V , E > 是 n 阶 m 条边的无向图,则下面各命题是等价的:(1) G 是树(2) G 中任意两个顶点之间存在唯一的路径(3) G 中无回路且 m = n − 1(4) G 是连通的且 m = n − 1(5) G 是连通的且 G 中任何边均为桥(6) G 中没有回路,但在任何两个不同的顶点之间加一条新 边,在所得图中得到惟一的一个含新边的圈
定理11.2 设T是n阶非平凡的无向树,则T 中至少有两片树叶
例1
已知无向树T中有1个3度顶点,2个2度顶点,其余顶点全是树叶,试求树叶数
解
解本题用树的性质 m = n − 1以及 握手定理,握手定理及2m=总度数,m为边,n为结点,详细可以看第九部分图论的握手定理内容设有 x 片树叶于是 n = 1+2+ x = 3+x 总结点数2 m = 2( n − 1) = 2 × (2+ x ) = 1 × 3+2 × 2+x 一个三度顶点,两个二度顶点,x片树叶,总度数解出 x = 3故 T 有 3 片树叶
例2
已知无向树T有5片树叶,2度与3度顶点各1个,其余顶点的度数均为4,求T的阶数n
解设 T 的阶数为 n , 则边数为 n − 1 , 4 度顶点的个数为 n − 7由握手定理得2 m = 2( n − 1) = 5 × 1+2 × 1+3 × 1+4( n − 7)解出 n = 84 度顶点为 1 个
定义 11.2 设 G 为无向图(1) G 的 树 —— T 是 G 的子图并且是树(2) G 的 生成树 —— T 是 G 的生成子图并且是树(3) 生成树 T 的 树枝 —— T 中的边(4) 生成树 T 的 弦 —— 不在 T 中的边(5) 生成树 T 的 余树 T —— 全体弦组成的集合的导出子图
定理11.3 无向图G具有生成树当且仅当G连通
推论1 G为n阶m条边的无向连通图,则m≥n−1
推论2 的边数为m−n+1
推论3 为G 的生成树 T 的余树, C 为 G 中任意一个圈,则 C 与 一定有公共边
定义 11.3 T 是 G =< V , E , W > 的生成树(1) W ( T )—— T 各边权之和(2) 最小生成树 —— G 的所有生成树中权最小的
求最小生成树的一个算法
避圈法(Kruskal)
设 G =< V , E , W > ,将 G 中非环边按权从小 到大排序: e 1 , e 2 , …, e m(1) 取 e 1 在 T 中(2) 查 e 2 ,若 e 2 与 e 1 不构成回路,取 e 2 也在 T 中,否则弃 e 2(3) 再查 e 3 ,…, 直到得到生成树为止
例3
求图的一棵最小生成树
解
避圈法即遇到圈则将其中遇到的最大边给丢弃
所求最小生成树如 图所示W ( T )=38
定义11.4 T是有向树(基图为无向树)
(1) T 为 根树 —— T 中一个顶点入度为 0 ,其余的入度均为 1(2) 树根 —— 入度为 0 的顶点(3) 树叶 —— 入度为 1 ,出度为 0 的顶点(4) 内点 —— 入度为 1 ,出度不为 0 的顶点(5) 分支点 —— 树根与内点的总称(6) 顶点 v 的 层数 —— 从树根到 v 的通路长度(7) 树高 —— T 中层数最大顶点的层数(8) 平凡根树 —— 平凡图
根树的画法——树根放上方,省去所有有向边上的箭头
定义 11.5 T 为非平凡根树(1) 祖先与后代(2) 父亲与儿子(3) 兄弟
定义 11.6 设 v 为根树 T 中任意一顶点,称 v 及其后代的导出子 图为以 v 为根的 根子树(1)T为有序根树——同层上顶点标定次序的根树(2)分类①r叉树——每个分支点至多有r个儿子②r叉有序树——r树是有序的③r叉正则树——每个分支点恰有r个儿子④r叉正则有序树⑤r叉完全正则树——树叶层数相同的r叉正则树⑥r叉完全正则有序树
定义 11.7 设二 叉树 T 有 t 片树叶 v 1 , v 2 , …, v t ,权分别为 w 1 , w 2 , …, w t ,称 为 T 的权,其中 l ( v i ) 是 v i 的层数, 在所有有 t 片树叶,带权 w 1 , w 2 , …, w t 的二 叉树中,权最小的二 叉树称为 最优二 叉树
求最优树的算法—— Huffman算法
给定实数 w 1 , w 2 , …, w t ,且 w 1 ≤ w 2 ≤ … ≤ w t(1) 连接权为 w 1 , w 2 的两片树叶,得一个分支点,其权为 w 1 + w 2(2) 在 w 1 + w 2 , w 3 , …, w t 中选出两个最小的权,连接它们对应的 顶点 ( 不一定是树叶 ) ,得新分支点及所带的权(3) 重复 (2) ,直到形成 t − 1 个分支点, t 片树叶为止
例4
求带权为1, 1, 2, 3, 4, 5的最优树
解
W(T)=1×4+1×4+2×3+3×2+4×2+5×2=4+4+6+6+8+10=38
最下方的数×层数的和为总权
定义 11.8设 α 1 , α 2 , …, α n -1 , α n 是长度为 n 的符号串(1) 前缀 —— α 1 , α 1 α 2 , …, α 1 α 2 … α n − 1(2) 前缀码 ——{ β 1 , β 2 , …, β m } 中任何两个元素互不为前缀(3) 二元前缀码 —— β i ( i =1, 2, …, m ) 中只出现两个符号,如 0 与 1
定理 11.4 一棵 二 叉树产生一个二元前缀码推论 一棵正则 二 叉树产生唯一的前缀码(按左子树标 0 , 右子树标 1 )
例
图所示二叉树产生的前缀码为{ 00, 10, 11, 011, 0100, 0101 }
行遍或周游根树T——对T的每个顶点访问且仅访问一次
对二 叉有序正则树的周游方式:① 中序行遍法 —— 次序为:左子树、根、右子树② 前序行遍法 —— 次序为:根、左子树、右子树③ 后序行遍法 —— 次序为:左子树、右子树、根
例
对图所示根树按中序、前序、 后序行遍法访问结果分别为:中序b a f d g c e前序a b c d f g e后序b f g d e c a
存放规则
最高层次运算放在树根后依次将运算符放在根 子树的根上数放在树叶上规定:被除数、被减数 放在左子树树叶上例
波兰符号法
按前序行遍法访问存放算式的 2 叉有序正则树,其结果不加 括号,规定每个运算符号与其后面紧邻两个数进行运算,运 算结果正确 . 称此算法为波兰符号法或前缀符号法, 对上图的 访问结果为÷ ∗ + b + c d a − ∗ e f ∗ + g h ∗ i j
逆波兰符号法
按后序行遍法访问,规定每个运算符与前面紧邻两数运算, 称为逆波兰符号法或后缀符号法 , 对上图的访问结果为b c d + + a ∗ e f ∗ g h + i j ∗ ∗ − ÷