哈夫曼树

抒与台 2019-04-16 11:37:11
哈夫曼树 #include<iostream> using namespace std; const int MAX=20; //哈夫曼树输入数据的结构 struct huffinit { char data; int weight; }; //哈夫曼树结点的结构 struct huffnode { int weight; int lchild,rchild,parent; }; //哈夫曼树类的声明 class HuffTree { public: HuffTree(huffinit w[],int n) { int min1,min2; size=n; for(int i=0;i<n;i++) tree[i].weight=w[i].weight; for(i=0;i<2*n-1;i++) { tree[i].parent=-1; tree[i].lchild=-1; tree[i].rchild=-1; } for(i=n;i<2*n-1;i++) { Select(min1,min2,i); // cout<<min1<<min2<<endl; tree[min1].parent=i; tree[min2].parent=i; tree[i].weight=tree[min1].weight+tree[min2].weight; tree[i].lchild=min1; tree[i].rchild=min2; } } //~HuffTree() { } void Select(int &min1,int &min2,int m) { int mm1,mm2,i; mm2=mm1=999999; for(i=0;i<m;i++) { if(tree[i].parent==-1) { if(mm1>tree[i].weight) { mm1=tree[i].weight; min1=i; } } } // cout<<mm1<<endl; for(i=0;i<m;i++) { if(tree[i].parent==-1) { if(mm2>tree[i].weight&&i!=min1) { mm2=tree[i].weight; min2=i; } } } // cout<<mm2<<endl; } void show() { for(int i=0;i<2*size-1;i++) { printf("%d,%d,%d,%d\n",tree[i].weight,tree[i].parent,tree[i].lchild,tree[i].rchild); } } private: huffnode tree[2*MAX-1]; int size; }; int main() { int n; huffinit a[20]; while(cin>>n) { for(int i=0;i<n;i++) cin>>a[i].data>>a[i].weight; HuffTree t(a,n); t.show(); cout<<endl; } return 0; }
...全文
25 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

64,652

社区成员

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

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