如何在文件中保存霍夫曼树?

时间:2014-12-23 03:32:35

标签: java tree huffman-code

我正在使用Java编写霍夫曼编码。我没有明白存储树的方式和位置。我知道如何制作树,然后将其保存为二进制文件,但为了解码目的,我们将再次需要相同的树进行解码。如何将该树保存在文件中以将其与二进制文件附加?

1 个答案:

答案 0 :(得分:1)

将树写为一系列位:0表示叶,1表示内部节点。具有N个叶节点和N-1个内部节点的二叉树(霍夫曼或其他)的输出将是2N-1比特的序列。 (实际上你可以保存两位,因为你知道树中的第一个和最后一个节点将是叶子节点,但它可能不值得使算法复杂化以保存两位。)

也许最简单的方法是按预先安排位:

function write_tree (top_node) {
    if is_leaf(top_node) {
        write "0"
        // optionally, write any date associated with the leaf node
        // although in practice it's easier to write the leaf data
        // to a separate output stream. That lets this stream contain
        // actual bits rather than the characters "0"/"1"
        }
    else {
        write "1"
        write_tree (top_node.left)
        write_tree (top_node.right) }}

function read_tree (bit_stream) -> returns tree
    next_bit = bit_stream.read()
    if next_bit = "0" {
        root = new leaf
        // optionally read data associated with the leaf node
        }
    else {
        root = new internal node
        root.left = read_tree (bit_stream)
        root.right = read_tree (bit_stream) }
    return root }

我一开始并没有注意到你提到过Java,所以我用伪代码编写了上面的内容,我确信你可以毫不费力地用Java重写。