我正在研究一个霍夫曼树,我正在试图弄清楚如何遍历树以找到具有我正在寻找的角色的节点。在搜索树时,我需要使用1和0(0左1右)保留一条路径到我正在寻找的节点。我怎么能这样做?
答案 0 :(得分:1)
很长一段时间以来,我写了一个霍夫曼引擎,但我会试一试。
伪代码。
假设你的霍夫曼树节点看起来像这样
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);