c语言并构造四则运算哈夫曼树
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c语言并构造四则运算哈夫曼树
以下是一个使用C语言构造哈夫曼树的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 二叉树节点结构体
typedef struct BiTNode {
int weight;
char data;
struct BiTNode *left, *right;
} BiTNode, *BiTree;
// 初始化哈夫曼树
BiTree CreateHuffmanTree(int* w, int n) {
if (n <= 1)
return NULL;
int i, j;
BiTree HT = (BiTNode*)malloc(sizeof(BiTNode));
HT->weight = 0;
HT->data = '#';
HT->left = HT->right = NULL;
// 初始化一个大小为2n-1的数组来存储哈夫曼树
BiTNode* p[2 * n - 1];
for (i = 0; i < 2 * n - 1; i++) {
p[i] = NULL;
}
// 将权值放入数组中
for (i = 0; i < n; i++) {
p[i] = (BiTNode*)malloc(sizeof(BiTNode));
p[i]->weight = w[i];
p[i]->data = i + '0';
p[i]->left = p[i]->right = NULL;
}
// 从最后一个非叶子节点开始,依次选择两个最小权值的节点作为左右子节点,构建父节点
for (i = n - 1; i >= 1; i--) {
for (j = 0; j < i; j++) {
if (p[j]->weight < p[j + 1]->weight) {
swap(p[j], p[j + 1]);
}
}
HT->left = p[i - 1];
HT->right = p[i];
HT = (BiTNode*)malloc(。