В настоящее время у меня есть 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 убирает первый бит в последовательности, а не последний