那么,什么是霍夫曼树(赫夫曼树)呢?
给定n个权值(权值就是每个节点里面存放的数据,但是根据业务需求不同,存放的数据类型有些差别)作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
看这个定义你肯定也很懵,我这里举一个例子,就不要专研这个定义了,通过图形可以很快的看懂
例如:权值分别为 5,3,9,1,6的这几个节点构建一颗二叉树
首先排序这样创建的二叉树才是有序的
那么排序的结果就是 1,3,5,6,9,然后把每个节点当做一颗最简单的二叉树,排序结果如下:
那么第二次操作:把前面两个权值加起来构建一个新的节点,然后把这个节点和前两个节点合并成一个二叉树,然后继续排序:
继续下去:
最后一步: