3.1.4 哈夫曼树的存储
对哈夫曼树的存储我们可以采用带双亲的孩子链表作为结点的存储结构。由哈夫曼算法可知,如果哈夫曼树有n个叶结点,则最终生成的哈夫曼树共有2n-1个结点。因此可用一个长为2n的一文数组存放哈夫曼树中所以结点,存储结构如表3-1;本文来自辣.文,论-文·网原文请找腾讯324.9114
表3-1哈夫曼书存储结构
name weight parent lchild rchild
#define leafnum 27
#define hufnum 2*leafnum
typedef char datatype;
typedef struct node
{
datatype name;
int weight;
int parent,lchild,rchild;
}huftree;
huftree tree[hufnum+1];
其中,name表示结点数据的名称,weight表示结点的权值,lchild,rchild分别表示结点的左右孩子在数组中的下标值,叶结点的左右孩子下标值均为0;parent表示结点的双亲在数组中的位置。利用parent=0得知该结点为树的根结点,否则为非根结点。在把森林中的两棵二叉树合并成一棵树时,必须选取两个根结点的权值最小的结点,此时就是根据parent来区分根与非根结点。
3.2 哈夫曼编、译码
3.2.1 哈夫曼编码 国际会计和金融认证的英文文献和翻译
在电报通信中,电文是以二进制数0、1序列传送的。在发送端将电文中的字符序列转换为二进制数0、1序列,这就是编码。哈弗曼编码就是为了得到最短的二进制前缀编码,用来缩短传送电文的总长度L。为了得到总厂最短的二进制前缀编码,可用该字符出现的频率作为叶子结点的权赋给该结点,求出此树的最小带权路径长度。用哈夫曼树得到的编码就成为哈弗曼编码。其实现算法如下:
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页