题解 | #哈夫曼树#
哈夫曼树
https://www.nowcoder.com/practice/162753046d5f47c7aac01a5b2fcda155
#include <functional> #include <iostream> #include <vector> #include "queue" using namespace std; priority_queue<int, vector<int>, greater<int>> heap; int n; int answer; int main() { cin >> n; while(n--){ int x; cin >>x; heap.push(x); } while(heap.size()>1){ int l,r; l=heap.top(); heap.pop(); r=heap.top(); heap.pop(); answer+=l+r; heap.push(l+r); // 哈夫曼 的 带权路径和 就等于所有非叶节点之和 也就是 l+r 之和 } cout << answer <<endl; } // 64 位输出请用 printf("%lld")
哈夫曼 的 带权路径和 就等于所有非叶节点之和 也就是 l+r 之和
}