![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f32223d578f269e924785e94a2af6365.png)
**哈夫曼树主要步骤:**
1-排序 可以直接放在 <set> 的 multiset中,会自动排序且允许重复项
2-把最小的两个数加起来,且把和值放到累加器中 可以创建一个全局变量存
3-把两个最小的数加起来的和,放到容器中
注意:关联容器中的迭代器不能 p+n, 只能p++。(最好是写 ++p)
#include <iostream>
#include <set>
using namespace std;
int n,sum;
multiset<int> aa;
int main()
{
multiset<int>::iterator p;
cin >> n;
for(int i=0; i<n ;i++)
{
int x;
cin >> x;
aa.insert(x);
}
cout << endl << "进入容器后: " << endl;
for(p=aa.begin(); p!=aa.end(); p++ )
{
cout << *p << " ";
}
cout << endl;
while(aa.size()!=1)
{
p=aa.begin();
int i,j;
i=*p, j=i+ *(++p);
aa.erase(aa.begin());
aa.erase(aa.begin());
sum+=j;
aa.insert(j);
for(p=aa.begin(); p!=aa.end(); p++ )
{
cout << *p << " ";
}
cout <<endl << " sum = "<< sum<< endl;
}
cout << sum;
return 0;
}