c++ 实现哈夫曼树中遇见的问题
为了提高效率求得 叶子 节点中权值最小的两个元素,我们需要使用堆数据结构,它可以以O(logn)的复杂度
取得n个元素中的最小元素。为了绕过堆的实现,我们可以使用标准模板库中相应的标准模板—优先队列。
在使用队列前,需要做相应的预处理
#include <queue>
using namespace std;
priority_queue<int> Q; // 建立一个保存元素为int 的堆Q(注意:这样建立的堆默认为大根堆)
//使用如下语句建立一个小根堆
priority_queue<int vector<int>,greater<int>> (注意:这样的写法是错的,最后两个'>'之间要有空格)
priority_queue<int vector<int>,greater<int> > //为如果是两个连起来的>>蠢萌的编译器会把它认成输出符cout>>这个符号的
堆的操作如下:
Q.push()
int a=Q.top() //取出堆顶元素放在Q中
Q.pop() //弹出堆顶元素,取出后堆自动调整为一个小根堆