哈夫曼树的带权路径长度 = 非叶子结点的权值之和 怎么理解?
先看一个题目:
题目描述#
哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出哈夫曼树的带权路径长度。
输入描述:
输入有多组数据。 每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2<=n<=1000)。
输出描述:
输出带权路径长度。
这题用到一个结论:
哈夫曼树的带权路径长度 = 非叶子结点的权值之和
一个便于理解这个结论的思路如下:
1 #include <iostream> 2 #include <string> 3 #include <queue> 4 5 using namespace std; 6 7 int a[1010]; 8 9 int main() 10 { 11 12 int n; 13 while(cin >> n) 14 { 15 priority_queue<int, vector<int>, greater<int> > q; 16 for(int i = 0; i < n; ++i) 17 { 18 cin >> a[i]; 19 q.push(a[i]); 20 } 21 22 int ans = 0; 23 while(q.size() > 1) 24 { 25 int a = q.top(); 26 q.pop(); 27 int b = q.top(); 28 q.pop(); 29 ans += a + b; 30 q.push(a+b); 31 } 32 33 cout << ans << endl; 34 35 } 36 37 38 return 0; 39 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南