【数据结构】最小堆实现哈夫曼树构造与解码
#include<stdio.h>
#include<iostream>
#include<queue>
#include<string>
using namespace std;
#define MAX 100
struct Node{
int weight; //权重
char c; //字符
string code; //解码结果
Node *parent,*left,*right;
//初始化
Node(){
parent = left = right = NULL;
code="";
}
};
//定义指针比较函数
struct PCmp
{
bool operator () (Node const *x, Node const *y)
{
return x->weight > y->weight;<span style="display: none; width: 0px; height: 0px;" id="transmark"></span>
}
};
priority_queue<Node *,vector<Node *>,PCmp>Q; //最小堆
//构造HuffmanTree
void CreatHuffmanTree(Node *a[],int n){
for(int i=0;i<n;i++){
Q.push(a[i]);
}
Node *parent;
Node *s1,*s2;
while(Q.empty()==false){
s1 = Q.top();
Q.pop();
if(Q.empty()==true) break; //最后队列中只有一个元素&#x