Давно я написал двигатель Хаффмана, но я попробую.
Псевдокод.
Предполагая, что ваш Узел Дерева Хаффмана выглядит следующим образом
class HuffNode
{
...
char ch;
long huffCode; //initialized to zero initially
HuffNode left,right;
}
Итак, вот рекурсивная функция (преобразование в итеративное должно быть простым)
void buildCodes(HuffNode currentNode, long currentCode)
{
currentNode->huffCode = currentCode;
if(currentNode->left != null) buildCodes(currentNode->left, currentCode << 1);
if(currentNode->right != null) buildCodes(currentNode->right, (currentCode << 1) | 1);
}
Назовите это так
buildCodes(rootHuffNode,0);