Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 哈夫曼树编码_C - Fatal编程技术网

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;

如何在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;
        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;