题解 | #哈夫曼树#

哈夫曼树

http://www.nowcoder.com/questionTerminal/162753046d5f47c7aac01a5b2fcda155

#include "cstdio"
#include "queue"
using namespace std;
int main(){
    priority_queue<int> pqueue;//存入相反数
    int n;
    scanf("%d",&n);
    for (int i = 0; i < n; ++i) {
        int leaf;
        scanf("%d",&leaf);
        pqueue.push(-leaf);

    }
    int res=0;
    while (pqueue.size()>1){
        int leaf1 = pqueue.top();
        pqueue.pop();
        int leaf2 = pqueue.top();
        pqueue.pop();
        //计算带权路径和
        res = res + leaf1+leaf2;
        //把构成的新子树插入原集合;
        pqueue.push(leaf1+leaf2);

    }
    printf("%d\n",-res);
}
全部评论

相关推荐

点赞 评论 收藏
分享
10-16 09:58
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务