霍夫曼二叉树必须是正确的吗?

时间:2013-05-08 21:07:04

标签: c++ binary-tree huffman-code

我能找到的所有霍夫曼编码的例子都有偶数个字符可供使用。如果它是奇数个字符,那么添加到树的最后一个内部节点是否只有一个子节点?或者我是否必须添加某种类型的NULL节点,以便所有内部节点都有2个子节点?

如果是后者,它似乎令人困惑,因为我不确定如何为char设置NULL值(因为所有值都被用作有效的ASCII码)。

1 个答案:

答案 0 :(得分:2)

奇数char s没问题。但这不会导致只有一个孩子的内部节点。

  /\
 /  \
a    ×
    / \
   b   c

构建树的方式可确保所有内部节点都有两个子节点,无论有多少char

一个以叶子列表开始,然后在每个步骤中,(两个)具有最低频率的两个树通过使它们成为左边的resp来连接。一个新的 - 然后是内部 - 节点的右子树,直到只剩下一棵树。最终结果中的每个内部节点都来自加入两个子树,因此有两个子节点。