如何在C++中序列化霍夫曼树

How to serialize the Huffman tree in c++

如标题所示,我想将霍夫曼树序列化为编码文件的 header。 我看到这个问题:efficient way to storing huffman tree

我明白它是如何工作的,但我不能应用它,我写了这段代码:

typedef Node<char,unsigned long> Node;

void Encoder::EncodeNode(Node node)
{
if (node.left == &Node::NIL and node.right == &Node::NIL)
   {
    writeBit(1);
    outFile << node.first;
   }
else
   {
    writeBit(0);
    EncodeNode(*node.left);
    EncodeNode(*node.right);
   }
}

这是我用来编码字符的 writeBit 函数:

void Encoder::writeBit(unsigned short bit)
{
if(bit < 2){//if not EOF
    if(bit){
        byteBuffer |= (1 << (7 - byteCursor));
    }
    byteCursor++;
    if (byteCursor == 8) {
        outFile << byteBuffer;
        byteBuffer = 0;
        byteCursor = 0;
    }
}else{
    outFile << bit;
    }
}

但是有了这个函数,我一点也写不出来。 有什么建议吗?

更新: 能顺利吗?:

void Encoder::EncodeNode(Node node)
{
if (node.left == &Node::NIL and node.right == &Node::NIL)
{
    char c = node.first;
    writeBit(1);
    for (unsigned short i = 0; i < 8; i++) {
        writeBit(c & (1 << (7-i)));
    }
}
else
{
    writeBit(0);
    EncodeNode(*node.left);
    EncodeNode(*node.right);
}
}

查看 Ezran 对您所链接问题的回答(与已接受的答案相反)。这是最有效,也是最简单的方法。您根本不需要对树结构进行编码。您只需要发送每个符号的位数。