艾薇巴蒂!许久不见甚是想念,想必这”涨姿势”的时刻大家已经期待许久了!今天我们要共同学习的是c语言构造哈夫曼树-哈夫曼编码
构造哈夫曼树
首先,我们需要了解哈夫曼树是什么:
相关知识点路径:
路径是指从一个节点到另一个节点的分支序列。
路径长度:
指从一个节点到另一个结点所经过的分支数目。,从根节点到a的分支数目是2,
数的路径长度:
树中所有结点的路径长度之和为树的路径长度PL 如图pl为10
节点的权:
给树的每个结点赋予一个具有某种实际意义的实数,我们称该实数为这个结点的权
带权路径长度:
从树根到某一结点的路径长度与该节点的权的乘积,叫做该结点的带权路径长度树的带权路径长度: 树的带权路径长度为树中所有叶子节点的带权路径长度之和。
构造Huffman树的步骤:
1) 根据给定的n个权值,构造n棵只有一个根结点的二叉树,n个权值分别是这些二叉树根结点的权;
2) 设F是由这n棵二叉树构成的集合,在F中选取两棵根结点权值最小的树作为左、右子树,构造成一颗新的二叉树,置新二叉树根结点的权值等于左、右子树根结点的权值之和。为了使得到的哈夫曼树的结构唯一,规定根结点权值最小的作为新二叉树的左子树。
3) 从F中删除这两棵树,并将新树加入F;
4) 重复2)、3)步,直到F中只含一棵树为止,这棵树便是Huffman树。
说明:n个结点需要进行n-1次合并,每次合并都产生一个新的结点,最终的Huffman树共有2n-1个结点。
如何构建哈夫曼树:
如上即可较为清晰的理解最优二叉树的构造了。哈夫曼树代码的实现
所以:我们构成了一个哈夫曼树的结点结构HTNode:
下面给出具体实现代码:
不会吧?不会吧?不会真的还有人看了小软的课程还没有明白吧?不明白也没有关系哦,只要动动你可爱的小手指上滑再反复观看,拍拍你聪明的小脑袋瓜就一定能了如指掌啦!
小软这就去再看一遍,让我们一起加油,顶峰相见!
- END -
图片来源:来源于网络
责任编辑:刘泊璇 连雨欢