Получение битовой последовательности из tr ie для кодирования Хаффмана - PullRequest
0 голосов
/ 11 февраля 2020

В настоящее время у меня есть tr ie, построенный на частоте того, сколько раз символ появляется в файле. Теперь я пытаюсь go от root до каждого потомка и построить битовую последовательность для каждой буквы (каждый лист является буквой). Я использую предзаказ, делая это, и каждый раз, когда он переходит к левому потомку узла, предполагается добавить «1» в битовую последовательность, а справа «0». Однако я не могу найти хороший способ сделать это, я попытался использовать строки с strncat (), а затем, когда я нашел лист, у меня возникают проблемы с удалением последнего символа из строки, поэтому я использовал strncpy (thestring, thestring, strlen (thestring ) - 1) et c et c. Есть ли способ пройти через все дерево и добавить бит?

Table *fill_table(node *root, Table *hufftable, bit_buffer *b)
{
if(root->left == NULL && root->right == NULL){
    hufftable[(int)root->data].bseqe = bit_buffer_to_string(b);
    bit_buffer_remove_bit(b);
    return hufftable;
}
else{
    bit_buffer_insert_bit(b, 1);
    fill_table(root->left, hufftable, b);
    bit_buffer_insert_bit(b, 0);
    fill_table(root->right, hufftable, b);
}

return hufftable;

}

Это пример того, что у меня есть tr ie, проблема в том, что 1. он получает ошибку сегмента и 2. нам предоставляется битовый буфер (это школьное задание), и нам не разрешено его менять. bit_buffer_remove_bit убирает первый бит в последовательности, а не последний

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...