看看我写的哈夫曼树,不知道哪里错了。。

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;
}
...全文
78 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧