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

构造口诀

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

详细步骤

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

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

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

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

把新树放回森林

重复 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 唯一最小,树形不唯一

相关推荐
水蓝烟雨2 小时前
2071. 你可以安排的最多任务数目
数据结构·链表
晓觉儿3 小时前
【GPLT】2026年第十一届团队程序设计天梯赛赛后题解(已写2h,存档中)
数据结构·c++·算法·深度优先·图论
流年如夢4 小时前
自定义类型进阶:联合与枚举
java·c语言·开发语言·数据结构·数据库·c++·算法
葳_人生_蕤4 小时前
hot100——图
数据结构·算法
图码6 小时前
递归入门:从n到1的优雅打印之旅
数据结构·c++·算法·青少年编程·java-ee·逻辑回归·python3.11
大肥羊学校懒羊羊6 小时前
题解:计算约数个数
数据结构·c++·算法
良木生香6 小时前
【C++初阶】:STL——String从入门到应用完全指南(3)
c语言·开发语言·数据结构·c++·算法
qyzm6 小时前
Educational Codeforces Round 189 (Rated for Div. 2)
数据结构·python·算法
北顾笙9807 小时前
day28-数据结构力扣
数据结构·算法·leetcode