2012-03-13 4 views
4

Я пытаюсь сделать кодировку дерева хаффмана. Мое дерево правильно. Мне просто нужно выяснить, как исправить мою рекурсивную функцию, чтобы правильно создать таблицу. Спасибо за любую помощь, которую я могу получить.Кодировка кодирования кода Хаффмана

struct Code 
{ 
    char letter; 
    string code; 
}; 

void createCode(BTree<Data>* root,string codeStr,vector<Code> &table) 
{ 
    if (root->getRightChild() == NULL && root->getLeftChild() == NULL) 
    { 
     Code code; 
     code.letter = root->getData().getLetter(); 
     code.code = codeStr; 
     table.push_back(code); 
    } 
    else 
    { 
     createCode(root->getLeftChild(), codeStr.append("1"),table); 
     createCode(root->getRightChild(), codeStr.append("0"),table); 
    } 
} 

ответ

5

codeStr.append изменяет codeStr. Итак, вы правильно передаете codeStr + "1" в первый рекурсивный вызов, но codeStr + "10" ко второму. В результате все вхождения «0» добавляются дополнительным «1».

Попробуйте

createCode(root->getLeftChild(), codeStr + "1",table); 
createCode(root->getRightChild(), codeStr + "0",table); 
+0

Wow! Благодарю. Я не могу поверить, что все было так просто. Оно работает – user1266174

Смежные вопросы