#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;
}