给定n个叶子结点和权值,建立哈夫曼树并输出C语言数据结构
时间: 2023-07-19 10:30:04 浏览: 167
好的,以下是建立哈夫曼树并输出C语言数据结构的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_LEAF_NODE 1000
// 定义哈夫曼树结点
typedef struct Node {
int weight; // 权值
int parent; // 父亲结点编号
int leftChild; // 左儿子结点编号
int rightChild; // 右儿子结点编号
} Node;
// 建立哈夫曼树
void buildHuffmanTree(Node huffmanTree[], int leafWeight[], int n) {
// 初始化叶子结点
int i;
for (i = 0; i < n; i++) {
huffmanTree[i].weight = leafWeight[i];
huffmanTree[i].parent = -1;
huffmanTree[i].leftChild = -1;
huffmanTree[i].rightChild = -1;
}
// 建立中间结点
for (; i < 2 * n - 1; i++) {
int min1 = -1, min2 = -1;
// 找出权值最小的两个结点
int j;
for (j = 0; j < i; j++) {
if (huffmanTree[j].parent == -1) { // 未被处理的结点
if (min1 == -1 || huffmanTree[j].weight < huffmanTree[min1].weight) {
min2 = min1;
min1 = j;
} else if (min2 == -1 || huffmanTree[j].weight < huffmanTree[min2].weight) {
min2 = j;
}
}
}
// 将两个权值最小的结点合并
huffmanTree[min1].parent = i;
huffmanTree[min2].parent = i;
huffmanTree[i].weight = huffmanTree[min1].weight + huffmanTree[min2].weight;
huffmanTree[i].leftChild = min1;
huffmanTree[i].rightChild = min2;
}
}
// 输出哈夫曼树的C语言数据结构
void printHuffmanTree(Node huffmanTree[], int n) {
printf("Node huffmanTree[%d] = {\n", 2 * n - 1);
int i;
for (i = 0; i < 2 * n - 1; i++) {
printf("{%d, %d, %d, %d}", huffmanTree[i].weight, huffmanTree[i].parent, huffmanTree[i].leftChild, huffmanTree[i].rightChild);
if (i < 2 * n - 2) {
printf(", ");
}
if ((i + 1) % 5 == 0) {
printf("\n");
}
}
printf("\n};\n");
}
int main() {
int n; // 叶子结点个数
int leafWeight[MAX_LEAF_NODE]; // 叶子结点权值
Node huffmanTree[2 * MAX_LEAF_NODE - 1]; // 哈夫曼树
printf("请输入叶子结点个数:");
scanf("%d", &n);
printf("请依次输入%d个叶子结点的权值:", n);
int i;
for (i = 0; i < n; i++) {
scanf("%d", &leafWeight[i]);
}
buildHuffmanTree(huffmanTree, leafWeight, n);
printHuffmanTree(huffmanTree, n);
return 0;
}
```
这段代码可以根据输入的叶子结点权值建立哈夫曼树,并输出C语言数据结构。其中,哈夫曼树的结点类型为`Node`,包括权值(`weight`)、父亲结点编号(`parent`)、左儿子结点编号(`leftChild`)和右儿子结点编号(`rightChild`)四个属性。`buildHuffmanTree`函数用于建立哈夫曼树,`printHuffmanTree`函数用于输出哈夫曼树的C语言数据结构。
阅读全文