哈夫曼树

来源:互联网 发布:js将字符串转换成日期 编辑:程序博客网 时间:2024/05/21 19:57

        设二叉树具有n个带权值的叶子结点,从跟结点到各个叶子结点的路径长度与相应叶子结点权值的乘积之和叫做二叉树的带权路径长度(WPL),我们将其中WPL最小的二叉树叫做哈夫曼树。

        哈夫曼算法的基本思想是:

       将n个结点按照权值从小到大排序,也就相当于n个树,取其中根节点最小的两棵树构造一棵新的二叉树,将这两棵数在原集合中删除,并将新树的加入原集合中继续重复比较直到只剩下一棵二叉树。

       哈夫曼树的结构类型为:

struct element{     int weight;     int lchild,rchild,parent;};

      哈夫曼树算法实现:

void HuffmanTree(element huffTree[],int w[],int n){for (int i = 0; i < 2 * n - 1; i++)//初始化,所有结点均无双亲和孩子{huffTree[i].parent = -1;huffTree[i].lchild = -1;huffTree[i].rchild = -1;}for (int j = 0; j < n; j++)//构造n棵只含根节点的二叉树huffTree[j].weight = w[j];for (int k = n; k < 2 * n - 1; k++)//开始构造(n - 1次){int t1,t2;GetMin(huffTree,t1,t2);//查找权值最小的两个根结点,保存其下标huffTree[t1].parent = k;huffTree[t2].parent = k;huffTree[k].weight = huffTree[t1].weight + huffTree[t2].weight;huffTree[k].lchild = t1;huffTree[k].rchild = t2;}}



原创粉丝点击