1、构造哈夫曼树的过程
- 按从小到大排序
- 选取其根结点的权值为最小的两棵二叉树,分别作为左、右子树构造一棵新的二叉树,并置这棵新的二叉树根结点的权值为其左、右子树根结点的权值之和
- 删去这两棵树,同时加入刚生成的新树的根节点
- 再一次从小到大排序,重复上述过程
2、带权路径长度(WPL)
对于所有的树还有另外的算法就是:一棵树的带权路径长度等于其中所有分支结点的权值之和,也就是除头结点外各节点的权值加和
3、细碎知识点
- 对N(≥2)个权值均不相同的字符构造哈夫曼树,则树中任一非叶结点的权值一定不小于下一层任一结点的权值
- 哈夫曼树中一定没有度为1的结点
- 哈夫曼树中两个权值最小的结点一定是兄弟结点
- 经过哈夫曼编码后,求文本所占字节数也就是求带权路径长度
- 等长方式编码:有n个字符就是log2底n的长度,在求n个字符的带权路径长度的时候,叶子结点的路径长度均为log2底n
- 哈夫曼编码比采用等长方式的编码节省了多少位数,也就是求出各自的带权路径长度之后做差
- 一棵哈夫曼树的带权路径长度等于其中所有分支结点的权值之和,也就是除头结点外各节点的权值加和
- 哈夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近
- 哈夫曼树的结点个数不能是偶数
- 哈夫曼树是n个带权叶子结点构成的所有二叉树中带权路径最小的二叉树
- 在哈夫曼树中,任何一个结点它的度都是0或者2
- 当一棵具有n 个叶子结点的二叉树的WPL 值为最小时,称其树为哈夫曼树,其二叉树的形状不是唯一的
- 编码:左0右1,从树根到叶结点,经历的分支连起来就是编码序列
- 某字符出现的概率为,可以将概率视为叶子的权值