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