数据结构与算法_哈夫曼树&堆

本文介绍了哈夫曼树,一种用于优化数据存储的最优二叉树,强调了其带权路径长度最短的特点。接着,讨论了堆的概念,特别是最大堆,即完全二叉树中节点值大于或等于子节点的最大值。最后,提供了堆的.h实现代码和.cpp主函数验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 哈夫曼树----最优二叉树

定义:

  • 带权路径长度最短的树(将最常用的数据放在离根节点近的地方)

如果用树来保存数据,数据本身有一个出现的权重,那么把出现权重大的值放在离根节点近的地方
带权路径长度(WPL)计算方式请见附图计算方式
哈夫曼树示意图请见附图哈夫曼树

2. 堆----最大(小)堆

实际上就是最大(小)的完全二叉树
最大堆:

  1. 是一个完全二叉树
  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>::
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值