知识大全 最优二叉树

Posted 结点

篇首语:真者,精诚之至也,不精不诚,不能动人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 最优二叉树相关的知识,希望对你有一定的参考价值。

最优二叉树概念

.树的路径长度  树的路径长度是从树根到树中每一结点的路径长度之和 在结点数目相同的二叉树中 完全二叉树的路径长度最短

.树的带权路径长度(Weighted Path Length of Tree 简记为WPL)  结点的权 在一些应用中 赋予树中结点的一个有某种意义的实数   结点的带权路径长度 结点到树根之间的路径长度与该结点上权的乘积   树的带权路径长度(Weighted Path Length of Tree) 定义为树中所有叶结点的带权路径长度之和 通常记为                                               其中         n表示叶子结点的数目  wi和li分别表示叶结点ki的权值和根到结点ki之间的路径长度   树的带权路径长度亦称为树的代价

.最优二叉树或哈夫曼树  在权为wl w … wn的n个叶子所构成的所有二叉树中 带权路径长度最小(即代价最小)的二叉树称为最优二叉树或哈夫曼树  【例】给定 个叶子结点a b c和d 分别带权 和 构造如下图所示的三棵二叉树(还有许多棵) 它们的带权路径长度分别为         (a)WPL= * + * + * + * =         (b)WPL= * + * + * + * =         (c)WPL= * + * + * + * =  其中(c)树的WPL最小 可以验证 它就是哈夫曼树

 注意   ① 叶子上的权值均相同时 完全二叉树一定是最优二叉树 否则完全二叉树不一定是最优二叉树   ② 最优二叉树中 权越大的叶子离根越近   ③ 最优二叉树的形态不唯一 WPL最小

构造最优二叉树

.哈夫曼算法  哈夫曼首先给出了对于给定的叶子数目及其权值构造最优二叉树的方法 故称其为哈夫曼算法 其基本思想是   ( )根据给定的n个权值wl w … wn构成n棵二叉树的森林F=T T … Tn 其中每棵二叉树Ti中都只有一个权值为wi的根结点 其左右子树均空   ( )在森林F中选出两棵根结点权值最小的树(当这样的树不止两棵树时 可以从中任选两棵) 将这两棵树合并成一棵新树 为了保证新树仍是二叉树 需要增加一个新结点作为新树的根 并将所选的两棵树的根分别作为新根的左右孩子(谁左 谁右无关紧要) 将这两个孩子的权值之和作为新树根的权值   ( )对新的森林F重复( ) 直到森林F中只剩下一棵树为止 这棵树便是哈夫曼树  用哈夫曼算法构造哈夫曼树的过程见【动画演示】  注意   ① 初始森林中的n棵二叉树 每棵树有一个孤立的结点 它们既是根 又是叶子  ② n个叶子的哈夫曼树要经过n 次合并 产生n 个新结点 最终求得的哈夫曼树中共有 n 个结点   ③ 哈夫曼树是严格的二叉树 没有度数为 的分支结点    .哈夫曼树的存储结构及哈夫曼算法的实现( ) 哈夫曼树的存储结构  用一个大小为 n 的向量来存储哈夫曼树中的结点 其存储结构为   #define n //叶子数目  #define m *n //树中结点总数  typedef struct //结点类型      float weight //权值 不妨设权值均大于零      int lchild rchild parent //左右孩子及双亲指针    HTNode   typedef HTNode HuffmanTree[m] //HuffmanTree是向量类型 注意   因为C语言数组的下界为 故用 表示空指针 树中某结点的lchild rchild和parent不等于 时 它们分别是该结点的左 右孩子和双亲结点在向量中的下标   这里设置parent域有两个作用 其一是使查找某结点的双亲变得简单 其二是可通过判定parent的值是否为 来区分根与非根结点

( )哈夫曼算法的简要描述  在上述存储结构上实现的哈夫曼算法可大致描述为(设T的类型为HuffmanTree)  ( )初始化  将T[ ..m ]中 n 个结点里的三个指针均置为空(即置为 ) 权值置为  ( )输人  读人n个叶子的权值存于向量的前n个分量(即T[ ..n ])中 它们是初始森林中n个孤立的根结点上的权值  ( )合并  对森林中的树共进行n 次合并 所产生的新结点依次放人向量T的第i个分量中(n≤i≤m ) 每次合并分两步    ①在当前森林T[ ..i ]的所有结点中 选取权最小和次小的两个根结点[p ]和T[p ]作为合并对象 这里 ≤p p ≤i    ② 将根为T[p ]和T[p ]的两棵树作为左右子树合并为一棵新的树 新树的根是新结点T[i] 具体操作   将T[p ]和T[p ]的parent置为i   将T[i]的lchild和rchild分别置为p 和p   新结点T[i]的权值置为T[p ]和T[p ]的权值之和  注意   合并后T[pl]和T[p ]在当前森林中已不再是根 因为它们的双亲指针均已指向了T[i] 所以下一次合并时不会被选中为合并对象 哈夫曼算法模拟演示过程【参见动画模拟】

( )哈夫曼算法的求精  void CreateHuffmanTree(HuffmanTree T)    //构造哈夫曼树 T[m ]为其根结点      int i p p       InitHuffmanTree(T) //将T初始化      InputWeight(T) //输入叶子权值至T[ ..n ]的weight域      for(i=n i<m i++)//共进行n 次合并 新结点依次存于T[i]中          SelectMin(T i &p &p )           //在T[ ..i ]中选择两个权最小的根结点 其序号分别为p 和p           T[p ] parent=T[p ] parent=i           TIi] child=p //最小权的根结点是新结点的左孩子          T[j] rchild=p //次小权的根结点是新结点的右孩子          T[i] weight=T[p ] weight+T[p ] weight         // end for    上述算法中调用的三个函数【参见练习】 【例】以 个权值 为例 执行CreateHuffmanTree求最优二叉树的过程【参见动画模拟】

cha138/Article/program/sjjg/201311/23014

相关参考

知识大全 树 - 哈夫曼树及其应用 - 最优二叉树(一)

  树的路径长度  树的路径长度是从树根到树中每一结点的路径长度之和在结点数目相同的二叉树中完全二叉树的路径长度最短  树的带权路径长度(WeightedPathLengthofTree简记为WPL)

知识大全 数据结构之最优二叉树

基本术语  路径(Path)和路径长度从树中一个结点到另一个结点之间的分支构成这两个结点之间的路径路径上的分支数目称做路径长度  树的路径长度从树根到每一结点的路径长度之和  树的带权路径长度(Wei

知识大全 数据结构考研分类复习真题 第六章 树和二叉树 (一)[14]

  .在叶子数目和权值相同的所有二叉树中最优二叉树一定是完全二叉树该说法(   )【中国科技大学二(分)】【中科院计算所二(分)】  A.正确 B.错误  .最

知识大全 09年自考《数据结构》各章要点二[3]

  树的前序遍历与相对应的二叉树的前序遍历一致;树的后序遍历与相对应的二叉树的中序遍历一致  树的带权路径长度是树中所有叶结点的带权路径长度之和树的带权路径长度最小的二叉树就称为最优二叉树(即哈夫曼树

知识大全 树 - 哈夫曼树及其应用 - 哈夫曼编码 (二)

  根据最优二叉树构造哈夫曼编码  利用哈夫曼树很容易求出给定字符集及其概率(或频度)分布的最优前缀码哈夫曼编码正是一种应用广泛且非常有效的数据压缩  技术该技术一般可将数据文件压缩掉%至%其压缩效率

知识大全 数据结构 6.18 最优树的构造过程

  希赛教育计算机专业考研专业课辅导招生  希赛教育计算机专业考研专业课辅导视频  希赛教育计算机考研专业课在线测试系统  对个权值构造最优二叉树的过程cha138/Article/prog

知识大全 数据结构考研分类复习真题 第六章 树和二叉树 (四)[24]

  .给定权WW…Wm说明怎样来构造一个具有最小的加权路径长度的k叉树试对于权来构造最优的三叉树并给出其最小加权路径长度【北方交通大学年四(分)】  .已知下列字符ABCDEFG的权值分别为试填写出其

知识大全 树 - 二叉树 - 二叉树的定义

  二叉树是树形结构的一个重要类型许多实际问题抽象出来的数据结构往往是二叉树的形式即使是一般的树也能简单地转换为二  叉树而且二叉树的存储结构及其算法都较为简单因此二叉树显得特别重要  二叉树的定义 

知识大全 二叉树的定义

  二叉树是树形结构的一个重要类型许多实际问题抽象出来的数据结构往往是二叉树的形式即使是一般的树也能简单地转换为二叉树而且二叉树的存储结构及其算法都较为简单因此二叉树显得特别重要二叉树的定义二叉树的递

知识大全 树 - 二叉树 - 二叉树的性质

  二叉树具有以下重要性质  性质二叉树第i层上的结点数目最多为i(i≥)  证明用数学归纳法证明  归纳基础i=时有i==因为第层上只有一个根结点所以命题成立  归纳假设假设对所有的j(≤j  归纳