建立哈弗曼树要求我们每次都选频率权值最小的点构成节点,即权值小的点在树的深处,权值大的点在树的浅处,根据节点选择的特点,我们可以把节点的值放在优先队列中,包括新形成的节点。
我们先定义优先队列的优先级别。
1 struct cmp2 {3 bool operator()(const int &a,const int &b)4 {5 return a>b;6 }7 };//最小值优先出队
然后就是实现的整个程序。
#include#include #include #include #include #define maxn 50050using namespace std;struct cmp{ bool operator()(const int &a,const int &b) { return a>b; }};int main(){ int n; while(scanf("%d",&n)!=EOF) { int x; priority_queue ,cmp>q; for(int i=0;i
练习题链接
http://www.51nod.com/onlineJudge/questionCode.html#problemId=1117¬iceId=19046