霍夫曼树编码

时间:2020-06-15 19:01:34

标签: 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;
        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;

2 个答案:

答案 0 :(得分:1)

实际上它们是对还是左都没关系。

构造霍夫曼树的方法是保持选择两个最低频率并将它们组合到一个树节点中,以便一个成为左子节点,另一个成为右子节点,合并的频率为两个频率之和。该合并的节点将放在表中,以替换其两个子节点。随着先前组合的节点与其他节点配对,树逐渐构建。这个过程一直持续到所有频率都组合成一棵树为止。

答案 1 :(得分:0)

也许看看这个? https://www.geeksforgeeks.org/huffman-coding-greedy-algo-3/ 通常,如果数字小于前一个,则转到左侧;如果数字大于前一个节点,则转到右侧。