我正在研究一棵霍夫曼树,并且试图弄清楚如何遍历树以找到具有我正在寻找的字符的节点。在搜索树时,我需要使用 1 和 0(0 左 1 右)保留通往我正在寻找的节点的路径字符串。我怎样才能做到这一点?
问问题
1821 次
1 回答
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);
于 2010-07-23T04:37:23.117 回答