这是一个使用C++实现的哈夫曼树(Huffman Tree)的示例代码。哈夫曼树是一种用于数据压缩的算法,它通过构建最优二叉树来实现对数据进行编码和解码。
该代码中定义了一个HuffmanNode结构体表示哈夫曼树的节点,包含权重、左子节点和右子节点。还定义了一个比较函数Compare用于优先队列(priority_queue)中对节点按照权重进行排序。
函数buildHuffmanTree接收一个整数向量作为输入,表示每个叶子节点的权重。它使用优先队列按照权重构建哈夫曼树,并返回根节点。
函数print_tree用于层序遍历输出哈夫曼树的每个节点及其权重。
函数calculateWPL计算最优二叉树(哈夫曼树)的带权路径长度(Weighted Path Length)。其中参数root为当前节点指针,depth表示当前深度。如果遍历到叶子节点,则返回该叶子节点的权重乘以深度;否则递归计算左右子树的带权路径长度并相加。
在主函数main中,示例创建了一个包含5个元素{1, 3, 4, 5, 6}的向量tree作为输入,并调用buildHuffmanTree构建哈夫曼树。然后调用print_tree输出树的结构,并使用calculateWPL计算最优二叉树的带权路径长度,将结果打印输出。
如果有任何疑问,请随时提出。
内容由零声教学AI助手提供,问题来源于学员提问




