C 哈夫曼树编码
如何在c语言中向哈夫曼树插入数据C 哈夫曼树编码,c,C,如何在c语言中向哈夫曼树插入数据 huffman_tree *huffman_node_create(char data, unsigned int frequency) { huffman_tree *node = malloc(sizeof(huffman_tree)); node->data = data; node->frequency = frequency; node->left = NULL;
huffman_tree *huffman_node_create(char data, unsigned int frequency)
{
huffman_tree *node = malloc(sizeof(huffman_tree));
node->data = data;
node->frequency = frequency;
node->left = NULL;
node->right = NULL;
return node;
}
我写这篇文章是为了创建哈夫曼树。但我不知道我怎么能把频率加在树上,我怎么能知道数字应该是右还是左
以及:
也许看看这个?
一般来说,如果数字比上一个节点小,则向左移动;如果数字比上一个节点大,则向右移动。实际上,数字是右还是左并不重要
构建哈夫曼树的方法是不断选择两个最低频率,并将它们组合成一个树节点,这样一个成为左边的子节点,另一个成为右边的子节点,组合的频率是两个频率的总和。此组合节点被放入表中,替换其两个子节点。随着先前合并的节点与其他节点配对,树逐渐构建。这一过程一直持续到所有频率组合成一棵树。我有相同和不同频率的字母。我不知道如何使用循环或函数将它们添加到树中。从最小值中选择任意两个-只要确保在压缩端和解压缩端构建树时使用相同的选择策略即可。如果在构建树的过程中遇到问题,看一看二进制堆数据结构——它经常用于这个特定任务——它可以很容易地从总体中提取具有最低或最高键值的项。
typedef struct huffman_tree{
char c;
int freq; //unsigned?
struct huffman_tree *left; // 0 (left)
struct huffman_tree *right; // 1 (right)
}huffman_tree;