如何建立哈夫曼树的,网上搜索一堆,这里就不写了,直接给代码。
1.哈夫曼树结点类:HuffmanNode.h
#ifndef HuffmanNode_h
#define HuffmanNode_h
template <class T>
struct HuffmanNode {
T weight; // 存储权值
HuffmanNode<T> *leftChild, *rightChild, *parent; // 左、右孩子和父结点
};
#endif /* HuffmanNode_h */
2.哈夫曼树最小堆:HuffmanMinHeap.h
#ifndef HuffmanMinHeap_h
#define HuffmanMinHeap_h
#include "HuffmanNode.h"
#include <iostream>
using namespace std;
const int DefaultSize = 100;
template <class T>
class MinHeap {
public:
MinHeap(); // 构造函数
~MinHeap(); // 析构函数
void Insert(HuffmanNode<T> *current); // 插入
HuffmanNode<T> *getMin(); // 获取最小结点
private:
HuffmanNode<T> *heap; // 动态数组存储最小堆
int CurrentSize; // 目前最小堆的结点数
void ShiftUp(int start); // 向上调整
void ShiftDown(int start, int m); // 下滑
};
// 构造函数
template <class T>
MinHeap<T>::MinHeap() {
heap = new HuffmanNode<T>[DefaultSize]; // 创建堆空间
CurrentSize = 0;
}
// 析构函数
template <class T>
MinHeap<T>::~MinHeap() {
delete []heap; // 释放空间
}
// 插入
template <class T>
void MinHeap<T>::Insert(HuffmanNode<T> *current) {