任何二进制数据代码都可以表示为二叉树。该代码由从根到叶子的路径表示,左边的边表示前缀中的0,右边的边表示1(或反之亦然)。请记住,对于每个符号,都有一个叶节点。为了证明最优代码将被表示为完全二叉树,让我们回顾一下什么是完全二叉树,它是一棵树,其中每个节点要么是叶子节点,要么有两个孩子。假设某个代码是最优的,并且由非完全树表示。因此,存在一个仅具有单个子节点v的某个顶点u。连接u和v之间的边将位x添加到以v为根的子树中符号(在叶子节点处)的前缀代码中。从这棵树中,我可以删除x边,并用v替换u,从而减少以v为根的子树中所有符号的前缀代码长度一位。这会减少至少一个符号的表示中的位数(当v是单例节点时)。这表明,该树实际上并未表示出最优代码,我的前提是错误的。从而证明引理。
来自wikipedia, 完全二叉树(有时称为2叉树或严格二叉树)是一种树,其中除了叶子节点之外的每个节点都有两个子节点。 Huffman编码树的构建方式一定会产生一个完全二叉树。因为在算法的每一步中,我们从队列中移除具有最高优先级(最低概率)的两个节点,并使用这两个节点作为子节点创建一个新的内部节点。