JavaScript哈夫曼树Huffman树实现
哈夫曼树是一种用于编码的数据结构,常用于数据压缩。在哈夫曼编码中,频率较高的字符使用较短的编码,而频率较低的字符使用较长的编码,以此来达到数据压缩的目的。下面是JavaScript实现哈夫曼树的完整代码。
// 定义哈夫曼树节点
function Node(value, freq) {
this.value = value; // 节点字符值
this.freq = freq; // 节点出现频率
this.left = null; // 左子树
this.right = null; // 右子树
}
// 构建哈夫曼树
function buildHuffmanTree(data) {
// 计算字符出现频率
const freqMap = new Map();
for (let i = 0; i < data.length; i++) {
if (freqMap.has(data[i])) {
freqMap.set(data[i], freqMap.get(data[i]) + 1);
} else {
freqMap.set(data[i], 1);
}
}
// 将节点按照频率从小到大排序
const nodes = Array.from(freqMap).map(([value, freq]) => new Node(value, freq));
nodes.sort((a, b) => a.freq - b.freq);
// 构造哈夫曼树
while (nodes.length > 1) {
const left = nodes.shift();
const right = nodes.shift();
const parent = new Node(null, left.freq + right.freq);
parent.left = le