我完全放弃了。这是使用二叉树的霍夫曼代码练习的一部分。
我的Encode()函数无效,因为我的助手CharToCode()不起作用。它总是返回一个空行,而不是二进制数(表示它在树上的确切位置)。
CharToCode():非成员递归辅助函数,用于从代码树中查找编码。
这是我必须完成的事情:
在函数遍历树时构建一个路径(在字符串'pathSoFar'中,通过连接0或1)。当到达叶子节点时,如果叶子数据值是被编码的字符,则返回路径;否则,这不是正确的路径并返回空字符串。
假设在驱动程序(主)文件中正确调用该函数,并且构造函数和加载函数是正确的。这就是我所拥有的:
void HuffmanTree::Encode(std::istream& messageFile, std::ostream & out)
{
char ch;
std::string pathSoFar;
std::string huffman;
while (messageFile.get(ch))
{
huffman = CharToCode(ch, root, pathSoFar);
out << pathSoFar;
}
out << std::endl;
}
std::string CharToCode(char ch, TreeNode* localRoot, std::string pathSoFar)
{
std::string code;
if(localRoot->info == ch)
return pathSoFar;
else
{
if(localRoot->left != NULL)
return CharToCode(ch, localRoot->left, pathSoFar+'0');
else if(localRoot->right != NULL)
return CharToCode(ch, localRoot->right, pathSoFar+'1');
}
return "";
}