一、概念
哈夫曼(Huffman)树又被称为最优二叉树,是一类带权路径长度最短的数
例子:有4个权值(1,3,5,7),利用这4个权值作为叶子结点构造二叉树
在图示的三个二叉树中:
wp1 = 1*2+3*2+5*2+7*2 = 32
wp2 = 1*3+3*3+5*2+7*1 = 29
wp3 = 1*2+3*3+5*3+7*1 = 33
上例的结果说明,由相同权值的一组叶子结点所构成的二叉树有不同的形态和不同的带权路径
如何构造带权路径长度最小的二叉树,哈夫曼给出了答案,这就是著名的哈夫曼树
了解信息论的同学应该知道著名的Haffman编码,后面的文章会介绍这种编码方式
哈夫曼树的构造过程如下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java