数据结构:哈夫曼树

这篇博客介绍了如何使用C语言实现哈弗曼树的创建,并提供了打印哈弗曼树、计算带权路径长度以及生成哈弗曼编码的函数。通过示例代码展示了哈弗曼树的构造过程,以及在数据压缩中的应用。
摘要由CSDN通过智能技术生成
#include <stdio.h>
#include <stdlib.h>

struct BTreeNode {
    int data;
    struct BTreeNode* left;
    struct BTreeNode* right;
};

struct BTreeNode* createHuffman (int a[], int n) {//根据数组a中n个权值建立一颗哈弗曼树,返回树根指针
    int i, j;
    struct BTreeNode *b[n], *q;
    //b = (struct BTreeNode **)malloc(n * sizeof(struct BTreeNode));
    for (i=0; i<n; i++) {//初始化b指针数组,使每个指针元素指向a数组中对应的元素节点
        b[i] = (struct BTreeNode *)malloc(sizeof(struct BTreeNode));
        b[i] -> data = a[i];
        b[i] -> left = b[i] -> right = NULL;
    }
    for (i=1; i<n; i++) {//进行n-1次循环建立哈弗曼树
        int k1 = -1, k2;//k1表示森林中具有最小权值的树根节点的下标,k2为次最小的下标
        for (j=0; j<n; j++) {//让k1初始指向森林中第一颗树,k2指向第二颗
            if (b[j] != NULL && k1 == -1) {
                k1 = j;
                continue;
            }
            if (b[j] != NULL) {
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值