树、森林——树与二叉树的应用(哈夫曼树的构造)

构造口诀

每次选两个权最小结点,合并出新父结点,重复直到只剩一个

详细步骤

把所有带权叶子结点看成一棵只有根的二叉树,构成森林

从森林中选出两个权值最小的树

新建一个父结点,权值 = 两结点权值之和

两棵小树分别作为新父结点左、右孩子

把新树放回森林

重复 2~5,直到森林只剩一棵树

这棵树就是哈夫曼树

关键规则

左右孩子没有严格顺序,所以哈夫曼树不唯一

合并出新结点一定是分支结点,不带原始权

哈夫曼树绝对没有度为 1 的结点

n 个叶子结点 → 总结点数 = 2n - 1

举例(权:1,2,3,4)

选 1、2 → 合并 3

森林:3、3、4

选 3、3 → 合并 6

森林:4、6

合并 4、6 → 10

最终哈夫曼树完成

考点

n 个叶子,分支结点 = n-1 个

总结点 = 2n-1

不存在度为 1 结点

WPL 唯一最小,树形不唯一

相关推荐
Shan120543 分钟前
经典问题——验证栈序列
数据结构·算法
漂流瓶jz3 小时前
UVA-1606 两亲性分子 题解答案代码 算法竞赛入门经典第二版
数据结构·算法·向量·aoapc·算法竞赛入门经典·atan2·浮点
Chen_harmony3 小时前
二、顺序表
数据结构
BAGAE3 小时前
星链卫星数据获取:从太空安全到实时通信的技术革命
网络·数据结构·数据库·算法·云计算·hbase
h_a_o777oah4 小时前
【算法专项】扩展域并查集:原理详解及解决大部分种类并查集问题(洛谷P5937 P2024 C++代码)
数据结构·c++·算法·acm·并查集·扩展域·逻辑建模
吴阿福|一人公司5 小时前
深度解析 Python 类变量修改的命名空间隔离
java·服务器·数据结构
不知名的老吴5 小时前
经典算法题之行星碰撞
数据结构·算法
丘山望岳5 小时前
剑起霜华——平衡二叉树(AVL树 )精讲
开发语言·数据结构·c++
LuminousCPP6 小时前
数据结构 - 单链表第一篇:单链表基础操作
c语言·数据结构·经验分享·笔记·学习
WL学习笔记6 小时前
通讯录(顺序表实现)
c语言·数据结构·算法