题解 | #哈夫曼树#优先队列

哈夫曼树

https://www.nowcoder.com/practice/162753046d5f47c7aac01a5b2fcda155

运用优先队列,可以将哈夫曼树序列的数字从小到大排列(借助负数取反技巧)

当队列中至少有两个元素的时候,取出队列头的两个元素相加,权重和加上这个数之后,把这个数重新压入优先队列,重复操作。

#include <bits/stdc++.h>

using namespace std;

int main() {
    int n;
    scanf("%d", &n);
    priority_queue<int> Myqueue;
    for (int i = 0; i < n; i++) {
        int m;
        scanf("%d", &m);
        Myqueue.push(-1 * m);
    }//此时队列的头元素是队列最小的元素
    int wpl = 0;//记录带权路径值
    while (Myqueue.size() >= 2) {
        int s1, s2;
        s1 = Myqueue.top();
        Myqueue.pop();
        s2 = Myqueue.top();
        Myqueue.pop();
        wpl += (s1 + s2);
        Myqueue.push(s1+s2);
    }
    printf("%d", -1 * wpl);
    return 0;
}

全部评论

相关推荐

人力小鱼姐:实习经历没有什么含金量,咖啡店员迎宾这种就别写了,其他两段包装一下 想找人力相关的话,总结一下个人优势,结合校园经历里有相关性的部分,加一段自我评价
点赞 评论 收藏
分享
06-07 19:59
门头沟学院 C++
补药卡我啊😭:都快15年前的了还在11新特性
你的简历改到第几版了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务