哈夫曼树(最优二叉树)&哈夫曼编码(c++实现)

哈夫曼树是一种具有最小带权路径长度的二叉树,权值越大节点越靠近根部。通过合并最小权值节点构建,使得根节点权值最小。哈夫曼编码使用前缀编码,左分支代表0,右分支代表1,从根到叶的路径形成字符编码。
摘要由CSDN通过智能技术生成

哈夫曼树(最优二叉树)

  • 具有最小带权路径长度的二叉树称为哈夫曼树

  • 权值越大的叶子节点越靠近根节点

  • 权值越小的叶子节点越远离根节点

  • 总是将最小权值和次最小权值的两个节点合并,依次往上构造树,这样根节点的权值就是最小权值

  • 假如哈夫曼树有n0个叶子节点,那么这棵树的总结点个数n=2*n0-1

typedef struct{
   
    int weight;
    int parent;
    int lchild;
    int rchild;
}HNode;

void Create_HuffMTree(HNode HFMTree[],int n){
          //n为叶子结点个数
    int x1,x2;  //x1和x2存储最小和次最小权值
    int m1,m2;  //m1和m2存储位置
    int i,j;
    for(i=0;i<2*n-1;++i){
          //HFMTree 初始化
        HFMTree[i].weight=0;
        HFMTree[i].lchild=-1;
        HFMTree[i]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值