template<class T>
void huffman(MinHeap<TreeNode<T>*> heap, int n)
{
for(int i=0;i<n-1;i++)
{
TreeNode<T> *first = heap.pop();
TreeNode<T> *second = heap.pop();
TreeNode<T> *bt = new BinaryTreeNode<T>(first, second, first.data, second.data);
heap.push(bt);
}
}
在我学习C++数据结构基础教材《数据结构基础》中,对于Huffman编码及其上方的代码只给了两页定义。但对我而言,这些内容都不够详细,所以我进行了搜索,学习了Huffman编码的过程。教材声称该代码可以生成一棵Huffman树,但在我看来这是错误的。因为Huffman树不一定是完全二叉树,但由于
heap.push()
语句的存在,上述代码似乎总是生成一个完全二叉树。有没有人能够解释一下这段代码为何不会出错呢?
BinaryTreeNode<T>
,可以弹出并成为完成的Huffman树的根;然后可以销毁堆,因为它不再需要。 - Jeffrey Hantin