c++类实现哈夫曼树权值和
时间: 2023-08-05 16:47:32 浏览: 78
以下是使用C++类实现哈夫曼树权值和的示例代码:
```
#include <iostream>
#include <queue>
using namespace std;
class Node {
public:
int weight;
Node* left;
Node* right;
Node(int w) {
weight = w;
left = nullptr;
right = nullptr;
}
~Node() {
delete left;
delete right;
}
};
class Compare {
public:
bool operator()(Node* a, Node* b) {
return a->weight > b->weight;
}
};
int huffman(Node* root) {
if (root->left == nullptr && root->right == nullptr) {
return root->weight;
}
int sum = 0;
if (root->left != nullptr) {
sum += huffman(root->left);
}
if (root->right != nullptr) {
sum += huffman(root->right);
}
return sum;
}
int main() {
int n;
cin >> n;
priority_queue<Node*, vector<Node*>, Compare> pq;
for (int i = 0; i < n; i++) {
int w;
cin >> w;
pq.push(new Node(w));
}
while (pq.size() > 1) {
Node* left = pq.top();
pq.pop();
Node* right = pq.top();
pq.pop();
Node* parent = new Node(left->weight + right->weight);
parent->left = left;
parent->right = right;
pq.push(parent);
}
Node* root = pq.top();
int ans = huffman(root);
cout << ans << endl;
delete root;
return 0;
}
```
这个示例代码与之前的示例代码非常相似,唯一不同的是`huffman`函数的实现。在这个版本中,我们不再乘以深度,而是直接返回每个叶子节点的权值之和。
在`main`函数中,我们首先读入节点的数量和权值,然后使用优先队列来构建哈夫曼树。最后,我们计算哈夫曼树的权值和并输出结果。同样需要注意,在程序结束时,我们需要手动删除根节点来释放内存。
阅读全文