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

构造口诀

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

详细步骤

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

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

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

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

把新树放回森林

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

相关推荐
Doraemomo5 小时前
数据结构-环形链表
java·数据结构·链表
爱跳舞的烤冷面9 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
MC皮蛋侠客11 小时前
Redis 系列(一):全景与最小闭环——从 `SET` 命令到内存数据结构
数据结构·数据库·redis
疯狂打码的少年11 小时前
【数据结构】队列:定义、顺序队列与链式队列
数据结构·笔记
蔬菜_12 小时前
前端转全栈-day5(数组、list、set)
java·前端·数据结构·list
CV-X.WANG13 小时前
从零理解 ORB-SLAM3(二):系统全景、执行上下文与核心数据结构
数据结构
Doraemomo13 小时前
数据结构-二叉树
数据结构
爱跳舞的烤冷面14 小时前
自学嵌入式第20天(数据结构篇——队列)
数据结构
旖旎夜光14 小时前
LeetCode 202:快乐数(双指针问题) —— 题解
数据结构·c++·算法·leetcode·双指针
cpp_250115 小时前
P1113 [USACO02FEB] 杂务
数据结构·c++·算法·动态规划·图论·拓扑排序·洛谷题解