来自Cormen的Huffman算法

时间:2012-08-06 16:20:16

标签: c++ algorithm huffman-code

我正在尝试使用multimap<int, NODE*>编写Huffman coding tree,其中NODE只是一个经典的树节点。 所以我写了这个方法:

this->CreateMapTree();
int n = (int)tree.size();
pair<int, NODE*> x, y, z;

for (int i = 0; i < n-1; ++i)
{
    x = *tree.begin(); tree.erase(tree.begin());
    y = *tree.begin(); tree.erase(tree.begin());

    z.second = new NODE;

    z.second->left = y.second;
    z.second->right = x.second;
    z.first = x.first + y.first;

    tree.insert(z);
}//after loop there is only one element in the tree


head = tree.begin()->second;

方法CreateMapTree工作得很完美,因为我有tree。 我使用经典算法来处理霍夫曼树(来自科尔门)。我多次检查这段代码,但我找不到我的错误。代码三是错误的,我无法为编码和解码创建正确的字典。

有什么问题?

1 个答案:

答案 0 :(得分:0)

我建议您查看从树中删除 x 和 y 后会发生什么。指向它们的指针可能不再有效。