从零开始的数据结构学习日记(十五)——1.15哈夫曼树(最优二叉树)

1.1最优二叉树

1.基本概念
1)路径长度:连接两结点的路径上的分支数。
2)树的路径长度:各结点到根结点的路径长度之和。
3)最优二叉树或哈夫曼树:带权路径长度最小的二叉树。
4)树的带权路径长度:树的所有叶子结点的带权路径长度之和,记为WPL。
2.哈夫曼树的构造
1)由给定的n个权值{w0,w1…wn},构造具有n棵二叉树的森林F,其中每一棵二叉树T只有一个带有权值w的根结点,其左右子树均为空。
2)在F中选取两个根结点权值最小和次小的二叉树,作为左右子树构造一棵新的二叉树,其根节点的权值为其左右子树根结点的权值之和。
3)在F中删去已作为新的二叉树的左右子树的两颗二叉树,把新的二叉树加入F中4)重复第二步和第三步,直到F中只剩下一棵树。

一个有n个叶子结点的初始集合,要生成哈夫曼树需要进行n-1次合并,产生n-1个新结点,最终构造的哈夫曼树有n+n-1个结点。哈夫曼树中没有度为1的分支结点,常将没有度为1的结点的二叉树称为严格二叉树。

#define n 16
#define m 2*n-1
typedef char datatype
typedef struct
{
	float weight;
	datatype data;
	int lchild,rchild,parent;
}hufmtree;
hufmtree tree[m];
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值