#include #include #include using namespace std; long sum = 0; class MyNode { public: long val; long depth; class MyNode *left; class MyNode *right; public: MyNode(long val) { this->val = val; this->left = NULL; this->right = NULL; } MyNode operator=(MyNode a) { return a; } bool operator()(MyNode a, MyNode b) { return a.val > b.val; } }; class cmp { public: //重载 () 运算符 bool operator()(MyNode a, MyNode b) { return a.val > b.val; } }; MyNode createHFTRee(vector& counts) {

priority_queue<MyNode, vector<MyNode>, cmp > queue(counts.begin(), counts.end());
while (!queue.empty()){
        MyNode left = queue.top();
        queue.pop();
        MyNode right = queue.top();
        queue.pop();
        MyNode par = MyNode(left.val + right.val);
        par.left = &left;
        par.right = &right;
        if(queue.empty()){
            return par;
        }else {
            queue.push(par);
        }
    }
return NULL;

}

void getSum(MyNode root) { queue queue0; root.depth = 0; queue0.push(root); MyNode cur(0); while (!queue0.empty()){ cur = queue0.front(); //哈夫曼树中,一个结点要么无左无右,要么有左有右 if(cur.left!=NULL){ cur.left->depth = cur.depth+1; cur.right->depth = cur.depth+1; queue0.push(*cur.left); queue0.push(*cur.right); }else { sum += cur.val * cur.depth; } } }

int main() { int n; cin >> n; vector counts; for (int i = 0; i < n; i++) { long m; cin >> m; MyNode node(m); counts.push_back(node); }

return 0;

}