数据结构4.2赫夫曼树

赫夫曼树

定义

赫夫曼树又称最优树,是一类带权路径长度最短的树
结点之间的路径:从一个结点到另一个结点所经过的结点序列
结点之间的路径长度:结点之间的路径上的分支(边)数
树的路径长度:从根结点到每个结点的路径长度之和
结点的带权路径长度:该结点的权值(w)乘以该结点到
根结点的路径长度(l)
树的带权路径长度:树中所有叶子结点的带权路径之和
赫夫曼树:树的带权路径长度最小的二叉树

构造赫夫曼树

赫夫曼算法,步骤如下:
1.根据给定的n个权值{w1,w2,w3,…,wn}构成n颗二叉树的集合F={T1,T2,…,Tn},其中每颗二叉树只有一个权值为wi的根结点,其左右子树均为空。
2.在F中选取两颗根结点的权值最小的二叉树作为左右子树构造一颗心的二叉树,且置新的二叉树的根结点权值为其左右孩子结点权值之和。
3.在F中删除这两颗子树,同时将新得到的二叉树加入F中。
4.重复23,直到F中仅剩一颗树为止,这颗二叉树即为所求

赫夫曼编码

利用二叉树设计二进制形式的字符前缀编码。叶子结点表示字符,结点上的权值表示该字符出现的频度,则可以先根据字符的频度构造一颗赫夫曼树,规定左分支为0,右分支为1,则每个字符的编码即为从根结点到该叶子结点所经过的分支构成的二进制序列。通过赫夫曼树得到的二进制前缀编码又称为赫夫曼编码

赫夫曼树类型定义
typedef struct
{unsigned int weight;
 unsigned int parent,lchild,rchild;
}HTNode,*HuffmanTree;//赫夫曼树结点类型
typedef char * *HuffmanCode;//赫夫曼编码类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值