一、哈夫曼树
1.1 哈夫曼树的概念
给定一个序列,将序列中的所有元素作为叶子节点构建一棵二叉树,并使这棵树的带权路径长度最小,那么我们就得到了一棵哈夫曼树(又称最优二叉树)
接下来是名词解释:
- 权:节点的数值
- 路径长度:两节点间路径的边数
- 带权路径长度:节点的权值乘以该节点到根节点的路径长度即为该节点的带权路径长度。哈夫曼树的带权路径长度是树中所有叶子节点的带权路径长度之和。
例如下面这棵哈夫曼树:
通过观察我们可以发现,所有父节点的权值都是自身的两个子节点的权值之和。而为了要使树的带权路径长度最小,我们要尽可能的让权值小的节点离根节点远,让权值大的节点离根节点近。
因此,我们引出哈夫曼树的构造算法。
1.2 哈夫曼树的构造算法
要将一个序列构造成一棵哈夫曼树,我们首先需要对其进行升序排序
将排序好后的序列中的每个值看作一棵只有一个节点的树,从中选出根节点权值最小的两棵树作为新树的左右子树,并将这两棵树从序列中删除,而新树的根节点的权