哈弗曼算法,帮忙看下代码。。。
#include <iostream>
using namespace std;
struct element
{
int weight;
int f; //标志位
int lchild,rchild,parent;
};
void Select(element c[],int a,int b);
void HuffmanTree(element huffTree[],int w[],int n)
{
int i = 0;
int j = 0;
for(i=0;i<2*n-1;i++)
{
huffTree[i].parent=-1;
huffTree[i].lchild=-1;
huffTree[i].rchild=-1;
}
for(j=0;j<n;j++)
huffTree[j].weight=w[j];
for(j=0;j<n;j++)
cout<<huffTree[j].weight<<endl;
int i1,i2;
for(int k=n;k<2*n-1;k++)
{
i1 = 0;
i2 = 0;
Select(huffTree,i1,i2);
huffTree[i1].parent=k;
huffTree[i2].parent=k;
huffTree[k].weight=huffTree[i1].weight+huffTree[i2].weight;
huffTree[k].lchild=i1;
huffTree[k].rchild=i2;
}
}
void Select(element c[],int a,int b)
{
a=0;
int i=0;
int j=0;
for(i=1;c[i].weight!=NULL&&c[i].f!=1;i++)
{
if(c[i].weight<c[a].weight)
a=i;
}
c[a].f=1;
if(a==0)
{ b=1;
}
else
{
b=0;
for(i=1;c[i].weight!=NULL&&c[i].f!=1;i++)
{
if(i==a)continue;
if(c[i].weight<c[b].weight)
b=i;
}
c[b].f=1;
}
}
void main(){
int n;
element aaa[100];
cout<<"请输入要编码的叶子节点个数:"<<endl;
cin>>n;
cout<<"请输入各叶子节点的权值:"<<endl;
int *w=new int[n];
for(int i=0;i<n;i++)
cin>>w[i];
HuffmanTree(aaa,w,n);
}