使用霍夫曼编码的图像压缩三

继续前面章节的介绍 

第8步
从根回溯到叶节点分配码字

从根开始,我们将“0”分配给左子节点,将“1”分配给右子节点。

现在,由于我们将新形成的节点附加到数组pix_freq,因此预计根将是索引totalnodes-1 处数组的最后一个元素。

因此,我们从最后一个索引开始遍历数组,将代码字分配给左右子节点,直到我们到达索引节点处形成的第一个父节点。我们不遍历叶节点,因为这些节点的左右子节点都为 NULL 指针。

// Assigning Code through backtracking
char left = '0';
char right = '1';
int index;
for (i = totalnodes - 1; i >= nodes; i--) {
    if (pix_freq[i].left != NULL) {
        strconcat(pix_freq[i].left->code, pix_freq[i].code, left);
    }
    if (pix_freq[i].right != NULL) {
        strconcat(pix_freq[i].right->code, pix_freq[i].code, right);
    }
}
void strconcat(char* str, char* parentcode, char add)
{
    int i = 0;
    while (*(parentcode + i) !&

猜你喜欢

转载自blog.csdn.net/tianqiquan/article/details/129970203
今日推荐