CreateHTree(HTree &HT, int n)——构造赫夫曼树HT,其中n是叶子结点数。要求根据赫夫曼树的构造规则,生成一个由2n-1个结点组成的一棵赫夫曼树。
时间: 2024-03-02 16:53:26 浏览: 63
好的,我理解了你的问题。下面是一个C++函数来构造赫夫曼树:
```c++
struct HTNode {
int weight;
int parent;
int lchild;
int rchild;
};
typedef struct HTNode HTree[2 * MAXSIZE - 1];
void CreateHTree(HTree &HT, int n) {
int m = 2 * n - 1;
for (int i = 0; i < m; ++i) {
HT[i].parent = -1;
HT[i].lchild = -1;
HT[i].rchild = -1;
}
for (int i = 0; i < n; ++i) {
cin >> HT[i].weight;
}
for (int i = n; i < m; ++i) {
int min1 = -1, min2 = -1;
for (int j = 0; j < i; ++j) {
if (HT[j].parent == -1) {
if (min1 == -1) {
min1 = j;
} else if (min2 == -1) {
min2 = j;
} else if (HT[j].weight < HT[min1].weight) {
min2 = min1;
min1 = j;
} else if (HT[j].weight < HT[min2].weight) {
min2 = j;
}
}
}
HT[i].weight = HT[min1].weight + HT[min2].weight;
HT[i].lchild = min1;
HT[i].rchild = min2;
HT[min1].parent = i;
HT[min2].parent = i;
}
}
```
其中,`HTNode` 是赫夫曼树的结点类型,`HTree` 是赫夫曼树的数组类型,`MAXSIZE` 是数组最大长度。函数 `CreateHTree` 的参数包括一个 HTree 数组和叶子结点数 n,用于构造赫夫曼树。
函数首先初始化 HTree 数组,然后输入 n 个叶子结点的权重,接下来按照赫夫曼树的构造规则,生成非叶子结点,最终构造出整个赫夫曼树。
阅读全文