霍夫曼代码编码遍历

时间:2012-03-13 10:27:48

标签: c++ binary-tree tree-traversal

我正在尝试对霍夫曼树进行编码。我的树是对的。我只需要弄清楚如何修复我的递归函数来正确创建表。感谢您提供的任何帮助。

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 个答案:

答案 0 :(得分:5)

codeStr.append修改codeStr。因此,您正确地将codeStr + "1"传递给第一个递归调用,而将codeStr + "10"传递给第二个递归调用。结果,所有出现的&#34; 0&#34;是附加的&#34; 1&#34;。

尝试

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