1. 哈夫曼树----最优二叉树
定义:
- 带权路径长度最短的树(将最常用的数据放在离根节点近的地方)
如果用树来保存数据,数据本身有一个出现的权重,那么把出现权重大的值放在离根节点近的地方
带权路径长度(WPL)计算方式请见附图
哈夫曼树示意图请见附图
2. 堆----最大(小)堆
实际上就是最大(小)的完全二叉树
最大堆:
- 是一个完全二叉树
- 堆中的任意一个节点的值都大于或者等于左右子树中值最大的节点
3. 堆的实现代码
.h 实现代码
#pragma once
template<class T>
class CMyheap
{
T *pBuff;
size_t len;
size_t maxSize;
public:
CMyheap();
~CMyheap();
void clear();
//在一个已经是最大堆的树末尾添加一个新值
void appendNode(T const& srcDate);
//删除根节点
void deleteNode();
//初始化一个树,使其成为一个最大堆
void initHeap(T arr[],int srcLen);
public:
//非堆函数,用来检验以上代码是否正确
void printfHeap();
T GetRoot()const {
return pBuff[0]; }
};
template<class T>
inline CMyheap<T>::CMyheap()
{
len = maxSize = 0;
pBuff = new T[len];
}
template<class T>
inline CMyheap<T>::~CMyheap()
{
clear();
}
template<class T>
inline void CMyheap<T>::clear()
{
if (pBuff != nullptr)
delete[] pBuff;
pBuff = nullptr;
len = maxSize = 0;
}
template<class T>
inline void CMyheap<T>::