一、哈夫曼树
①定义
树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
什么是路径?
在一棵树中,从一个结点到另一个结点所经过的所有结点,被我们称为两个结点之间的路径。
例如在这个途中,从a到e的路径就为2,a到h的路径为3;
什么是带权路径长度?
在一棵树中,所有叶子结点的带权路径长度之和,被称为树的带权路径长度,也被简称为WPL。
如果给上面的图树的叶子结点加上权值
那么树的带权路径长度为各个叶子结点到根的结点的带权路径长度和,比如这树的带权路径长度为:3x2+1x2+5x3=23
当然因为叶子结点的权值都不一样,使树的带权路径长度也会不一样,而哈夫曼树就是带权路径长度最短的树,权值较大的结点离根较近
②特点
1.权值越大的叶子节点越靠近根节点
⒉.权值越小的叶子节点越远离根节点
3.哈夫曼树并不唯一。
4.哈夫曼的子树也是哈夫曼树。
5.哈夫曼树无度为1的结点。
6.有n个叶子结点的哈夫曼树,总结点数为2n-1
③创建哈夫曼树
基本步骤
1.从小到大进行排序, 将每一个数据,每个数据都是一个节点 , 每个节点可以看成是一颗最简单的二叉树
2.取出根节点权值最小的两颗二叉树
3.组成一颗新的二叉树, 该新的二叉树的根节点的权值是前面两颗二叉树根节点权值的和
4.再将这颗新的二叉树,以根节点的权值大小 再次排序, 不断重复 1-2-3-4 的步骤,直到数列中,所有的数据都被处理,就得到一颗赫夫曼树
图解
先给定一个数组{2,3,7,9,18,25}(注意就算给你的数组不是有序的,后面也要把数组变有序),将其中的元素看成一个个树。