四、树与二叉树

本文介绍了哈夫曼树的构造过程,通过不断合并权值最小的树来生成一棵权值之和为新节点权值的树,直至只剩下一棵树。哈夫曼树的特点包括每个初始节点最终成为叶节点,权值小的节点路径长,没有度为1的节点。哈夫曼编码利用树的左右分支编号为0和1,形成最短前缀码,确保编码效率。解码时,根据编码和哈夫曼树结构进行。文章还提及哈夫曼树的带权路径长度在构造规则下保持不变,保证编码的最短性。
摘要由CSDN通过智能技术生成

哈夫曼树

构造

给定n个权值
1)将这n个权值分别看作只有根结点的n棵二叉树,这些二叉树构成的集合记为F。
2)从F中选出两棵结点的权值最小的树(假设为a、b)作为左、右子树,构造一棵新的二叉树(假设为c),新的二叉树的根结点的权值为左、右子树根结点权值之和。
3)从F中删除刚才选出的两棵树a、b,同时将新得到的树c加入F中。
4)重复进行2)、3)两步,直到F中只剩下一棵树为止,这棵树就是哈夫曼树。

哈夫曼树构造结果
都是左子树根权值小于右子树根权值,两子树根权值相同则较矮的子树在左边。

在这里插入图片描述特点【判断构造是否正确】
1)每个初始结点最终都成为叶结点,且权值越小的结点到根结点的路径长度越大。
2)构造过程中共新建了n-1个结点(双分支结点),因此哈夫曼树的结点总数为2n- 1。
3)每次构造都选择2棵树作为新结点的孩子,因此哈夫曼树中不存在度为1的结点

度:树中一个结点的子结点个数称为该结点的度

哈夫曼编码

如何编码?

对赫夫曼树每个结点的左右分支进行编号,左0右1,
则从根到每个结点的路径上的数字序列即为每个字符的编码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值