【数据结构与算法】哈夫曼树

哈夫曼树是一种特殊的二叉树,以带权路径长度最短为特点。它不是满二叉树的唯一形式,权值大的叶子节点更靠近根节点。哈夫曼树的构造过程涉及多次合并,总节点数为2n-1,所有分支节点度数为2。哈夫曼编码是其典型应用之一。

哈夫曼树的带权路径长度最短。
特点:

  • 满二叉树不一定是哈夫曼树
  • 哈夫曼树种权越大的叶子离根越近
  • 具有相同带权结点的哈夫曼树不唯一
  • 包含n个叶子结点的哈夫曼树共有2n-1个结点
  • 哈夫曼树的结点的度数为0或2,没有度为1的结点

构造哈夫曼树方法(口诀)

  • 构造森林全是根
  • 选用两小造新树
  • 删除两小添新人
  • 重复2,3剩单根

总结:
1.在哈夫曼算法中,初始时有n棵二叉树,要经过n-1次合并最终形成哈夫曼树。
2.经过n-1次合并产生n-1个新结点,且这n-1个新结点都是具有两个孩子的分支节点。
可见:哈夫曼树种共有n+n-1=2n-1个结点,且其所有的分支节点的度均不为1。

哈夫曼树构造算法的实现
顺序存储结构

typedef struct{
   
   
	int weight;
	int parent,lch,rch;
	}HTNode,*HuffmanTree;
void CreatHuffman Tree(HuffmanTree HT,
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值