Обход кодировки Хаффмана - PullRequest
4 голосов
/ 13 марта 2012

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

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);
   }
}

1 Ответ

5 голосов
/ 13 марта 2012

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

Попробуйте

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