哈夫曼树

本文详细介绍了如何通过哈夫曼算法构建哈夫曼树,包括哈夫曼树的定义、构建过程及其结构类型。通过逐步说明哈夫曼树的构建步骤,帮助读者理解其在压缩编码中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        设二叉树具有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;
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值