哈夫曼树也叫做最优二叉树。。如果扩充二叉树的外部节点都带有一定的权值,可将外部路径长度这一概念加以推广。设扩充二叉树具有m个带权值的外部节点,那么从根节点到各个外部节点的路径长度与相应结点权值的乘积的和,叫做扩充二叉树的带权的外部路径长度。。记作WPL。。。(摘抄自算法与数据结构课本)。
而关于哈夫曼树的应用,有哈夫曼编码与二路归并排序。。哈夫曼编码就是比如说要用二进制编译一段文字编码。。所以就需要把出现频率比较高的字符的编码放在靠近根结点的位置,这样的话,想要找到该字符的编码就能够节省相当一部分篇幅了。。。而二路归并排序就是说有n个已经排序的文件,每个文件包含的记录个数都已知可以采用两两合并的方法,把所有的文件的记录合到一个大文件中去,使得这个文件中的记录全部排序。。
说了这么多,,有没有赶脚到挺迷惑的啊。哈哈,直接上代码吧。。。
#include <iostream>
#include <cstdio>
#include <string>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <map>
#include <queue>
#include <stack>
#define INF 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a));
#define For(a,b) for(int i = a;i<b;i++)
#define LL long long
#define MAX_N 100010
u