Huffman树及编码的实现
定义
Huffman树又称最优树,是一类带权路径长度最短的树,而Huffman编码是基于Huffman树生成的一种前缀编码,保证了可变编码的平均编码最短。
生成方法
- 首先,假设有n个权值,则整个Huffman树的结点有2n-1个,未填充的节点有n-1个
- 从n个权值中挑选两个权值最小的结点构成一棵树的叶子节点,生成的树的根节点的权值为两个叶子节点的和,n++;
- 重复上述步骤,直到所节点都有权重。(即循环n-1次)
Huffman代码如下
#include <iostream>
#include <string>
using namespace std;
struct HuffmanNode{
int weight;
int parent,lchild,rchild;
};
void createHuffmanTree(HuffmanNode *& node, int *w, int n);
void selectNode(HuffmanNode *node, int & s1, int &s2, int n);
int main(){
HuffmanNode *node;
int w[] = { 5, 29, 7, 8, 14, 23