[TOC]
基础概念
路径:
- 在一棵树中,从一个结点到另一个结点所经过的所有结点,被我们称为两个结点之间的路径
路径长度:
- 在一棵树中,从一个结点到另一个结点所经过的“边”的数量,被我们称为两个结点之间的路径长度。
结点的带权路径长度:
- 结点的带权路径长度,是指树的根结点到该结点的路径长度,和该结点权重的乘积。边数*权重
树的带权路径长度:
- 在一棵树中,所有叶子结点的带权路径长度之和,被称为树的带权路径长度,也被简称为WPL。
哈夫曼树
- 就是保重树的带权路径长度最小。
- 哈夫曼树不唯一。
- 复杂度:nlog(n) 队列:log(n) 节点:n
实现逻辑
- 借助辅助队列,由小到大入队列。
- 借助辅助队列,我们可以找到权值最小的结点2和3,并根据这两个结点生成一个新的父结点,父节点的权值是这两个结点权值之和。
- 从队列中移除上一步选择的两个最小结点,把新的父节点加入队列也就是从队列中删除2和3,插入5,并且仍然保持队列的升序。队列数据长度为一,结束。
图解
代码实现
package
输出
[data:null;weight:18.0, data:a;weight:7.0, data:null;weight:11.0, data:b;weight:5.0, data:null;weight:6.0, data:d;weight:2.0, data:c;weight:4.0]