看看我写的哈夫曼树,不知道哪里错了。。
GOOWJ 2012-07-14 04:04:00 可能指针又不知指到哪里去了
#include <iostream>
using namespace std;
struct TREE
{
int weight;
int lchild,rchild,parent;
};
struct HuffmanTree
{
TREE*elem;
};
//-----------建立哈夫曼树----------
void select(HuffmanTree**t,int n,int &s1,int &s2)
{
int min;
for(int i=0;i<n;i++)
{
if((*t)->elem[i].parent==0)
{
min=i;
i=n+1;
}
}
for(i=0;i<n;i++)
{
if((*t)->elem[i].parent==0)
{
if((*t)->elem[i].weight<(*t)->elem[min].weight)
{
min=i;
}
}
}
s1=min;
for(i=0;i<n;i++)
{
if((*t)->elem[i].parent==0)
{
min=i;
i=n+1;
}
}
for(i=0;i<n;i++)
{
if((*t)->elem[i].parent==0&&i!=s1)
{
if((*t)->elem[i].weight<(*t)->elem[min].weight)
{
min=i;
}
}
}
s2=min;
}
int CreatehuffmanTree(HuffmanTree**t,int w[],int n)
{
if(n<=0)
{
return 0;
}
int i;
int s1,s2;//记录两个最小左右子树;
int m=2*n-1;
(*t)->elem=new TREE[m];
for(i=0;i<n;i++)
{
(*t)->elem[i].weight=w[i];
(*t)->elem[i].parent=0;
(*t)->elem[i].rchild=-1;
(*t)->elem[i].lchild=-1;
}
for(i=n;i<m;i++)
{
(*t)->elem[i].weight=0;
(*t)->elem[i].parent=0;
(*t)->elem[i].rchild=-1;
(*t)->elem[i].lchild=-1;
}
for(i=n;i<m;i++)
{
select(t,n,s1,s2);
(*t)->elem[s1].parent=n;
(*t)->elem[s2].parent=n;
(*t)->elem[i].lchild=s1;
(*t)->elem[i].rchild=s2;
(*t)->elem[i].weight=(*t)->elem[s2].weight+(*t)->elem[s1].weight;
}
}
int main()
{
HuffmanTree *t;
int w[5];
cout<<"输入各叶子节点的权:";
for(int i=0;i<5;i++)
{
cin>>w[i];
}
CreatehuffmanTree(&t,w,5);
for(i=0;i<2*5-1;i++)
{
cout<<t->elem[i].weight<<" ";
}
return 0;
}