在我在课堂上使用的书中(以及我从其他几个地方看到的),创建霍夫曼树的算法似乎源于
(1) 根据正在读入的任何文件或字符串中每个字符的频率构建一个 minheap。
(2) 从 minheap 中弹出 2 个最小值并将它们的权重组合到一个新节点中。
(3) 将新节点重新插入到同一个 minheap 中。
我对第 3 步感到困惑。我见过的大多数霍夫曼树的属性更类似于最大堆而不是最小堆(尽管它们不是完整的树)。也就是说,根包含最大权重(或者更确切地说是权重组合),而它所有的孩子的权重都较小。当组合节点放回 minheap 时,此实现如何给出霍夫曼树?我已经为此苦苦挣扎了一段时间。
这里已经发布了一个类似的问题(和我同一本书):我不明白这个霍夫曼算法实现
如果您想查看 (3) 中描述的确切功能。
谢谢你的帮助!