本文实例为大家分享了C语言实现哈夫曼树的具体代码,供大家参考,具体内容如下
//哈夫曼树C语言实现
#include
#include
typedef struct HuffmanNode
{
char letter;//存储的字符,叶节点为字母,非叶节点为#
struct HuffmanNode *parent;//父亲结点
int code;//如果为父亲结点的左孩子,则为0,右孩子为1
}HuffmanNode;
typedef struct HeapNode
{
int rate;//出现频率
HuffmanNode *node;//对应于哈夫曼树中的结点
}HeapNode;
/*------------------全局变量----------------------*/
int heapSize;//堆大小
int num;//记录字符数量
HeapNode *heap;//堆数组
char *letter;//字符数组
int *rate;//字符出现频率
HuffmanNode **array; //记录叶节点的数组,打印编码的时候可以从叶结点回溯向上
char ch;
/*----------------------函数声明-------------------------*/
void init(int numOfLetters);//初始化变量
void input();//输入数组
int parent(int i);//求父节点
int left(int i);//求左孩子
int right(int i);//求右孩子
void swap(int i,int j);//交换函数
void heapIfy(int i,int localHeapSize);//维持堆性质函数,使用前提为左右子树均为最小堆
void buildHeap();//初始化堆
HeapNode* extractMin();//去掉并返回堆中最小的元素
void