实现思路及步骤(注意:使用变量不要忘记添加变量的声明):A、类型定义哈夫曼树的存储结构;p147B、基本操作1)在序列中权值最小的两个结点,赋值给s1,s2;voidSelect(HuffmanTree&HT,intx)1、循环x个结点,对比其weght值是否为最小且parent为0,将其设为min1并赋值给s1完整代码
时间: 2024-02-23 09:02:33 浏览: 101
如何实现哈夫曼树编码
A、类型定义哈夫曼树的存储结构
```
typedef struct {
int weight; // 结点权值
int parent; // 双亲结点下标
int lchild; // 左孩子结点下标
int rchild; // 右孩子结点下标
}HuffmanNode, *HuffmanTree;
```
B、基本操作1)在序列中权值最小的两个结点,赋值给s1,s2;voidSelect(HuffmanTree&HT,intx)
```
void Select(HuffmanTree& HT, int x, int& s1, int& s2) {
int i, j;
int min1 = INT_MAX, min2 = INT_MAX;
for (i = 1; i <= x; i++) { // 找出最小的两个权值
if (HT[i].parent == 0) {
if (HT[i].weight < min1) {
min2 = min1;
s2 = s1;
min1 = HT[i].weight;
s1 = i;
}
else if (HT[i].weight < min2) {
min2 = HT[i].weight;
s2 = i;
}
}
}
}
```
完整代码如下所示:
```
#include <iostream>
#include <climits>
using namespace std;
typedef struct {
int weight; // 结点权值
int parent; // 双亲结点下标
int lchild; // 左孩子结点下标
int rchild; // 右孩子结点下标
}HuffmanNode, *HuffmanTree;
void Select(HuffmanTree& HT, int x, int& s1, int& s2) {
int i, j;
int min1 = INT_MAX, min2 = INT_MAX;
for (i = 1; i <= x; i++) { // 找出最小的两个权值
if (HT[i].parent == 0) {
if (HT[i].weight < min1) {
min2 = min1;
s2 = s1;
min1 = HT[i].weight;
s1 = i;
}
else if (HT[i].weight < min2) {
min2 = HT[i].weight;
s2 = i;
}
}
}
}
int main() {
return 0;
}
```
阅读全文