我能找到的所有霍夫曼编码的例子都有偶数个字符可供使用。如果它是奇数个字符,那么添加到树的最后一个内部节点是否只有一个子节点?或者我是否必须添加某种类型的NULL节点,以便所有内部节点都有2个子节点?
如果是后者,它似乎令人困惑,因为我不确定如何为char设置NULL值(因为所有值都被用作有效的ASCII码)。
答案 0 :(得分:2)
奇数char
s没问题。但这不会导致只有一个孩子的内部节点。
/\
/ \
a ×
/ \
b c
构建树的方式可确保所有内部节点都有两个子节点,无论有多少char
。
一个以叶子列表开始,然后在每个步骤中,(两个)具有最低频率的两个树通过使它们成为左边的resp来连接。一个新的 - 然后是内部 - 节点的右子树,直到只剩下一棵树。最终结果中的每个内部节点都来自加入两个子树,因此有两个子节点。