尝试通过二叉树

时间:2017-04-29 10:05:54

标签: c++ c++11 binary-tree huffman-code

我完全放弃了。这是使用二叉树的霍夫曼代码练习的一部分。

我的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 "";
}

0 个答案:

没有答案