#include
#include
#include <unordered_map>
#include
using namespace std;
// 哈夫曼树节点
struct HuffmanNode {
char character;
int frequency;
HuffmanNode* left;
HuffmanNode* right;
HuffmanNode(char ch, int freq) {
character = ch;
frequency = freq;
left = nullptr;
right = nullptr;
}
};
// 用于比较两个哈夫曼树节点的优先级
struct CompareNodes {
bool operator()(HuffmanNode* a, HuffmanNode* b) {
return a->frequency > b->frequency;
}
};
// 生成哈夫曼树
HuffmanNode* buildHuffmanTree(const unordered_map<char, int>& frequencies) {
// 创建最小堆
priority_queue<HuffmanNode*, vector<HuffmanNode*>, CompareNodes> minHeap;
// 将叶子结点(字符)