社区
C语言
帖子详情
急求!急求答案!关于赫夫曼树!!!高分回赠!!
advantage2004
2005-06-07 12:05:42
赫夫曼树的建立
任务 :建立建立最优二叉树函数
要求:可以建立函数输入二叉树,并输出其赫夫曼树
在上交资料中请写明:存储结构、 基本算法(可以使用程序流程图) 、输入输出、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法;
以上是题目,望各位大大帮忙解决源代码啊!
...全文
172
2
打赏
收藏
急求!急求答案!关于赫夫曼树!!!高分回赠!!
赫夫曼树的建立 任务 :建立建立最优二叉树函数 要求:可以建立函数输入二叉树,并输出其赫夫曼树 在上交资料中请写明:存储结构、 基本算法(可以使用程序流程图) 、输入输出、源程序、测试数据和结果、算法的时间复杂度、另外可以提出算法的改进方法; 以上是题目,望各位大大帮忙解决源代码啊!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
du51
2005-06-07
打赏
举报
回复
/* huffman树的构造方法*/
#include<stdlib.h>
#include<stdio.h>
#define MAXINT 2147483647
#define MAXNUM 50 /* 数组w中最多容纳的元素个数,注意 m<=MAXNUM */
#define MAXNODE 100 /* 哈夫曼树中的最大结点数,注意 2*m-1<MAXNODE */
struct HtNode { /* 哈夫曼树结点的结构 */
int ww;
int parent,llink,rlink;
};
struct HtTree {
int root;/* 哈夫曼树根在数组中的下标*/
struct HtNode ht[MAXNODE];
};
typedef struct HtTree *PHtTree; /* 哈夫曼树类型的指针类型 */
/* 构造具有m个叶结点的哈夫曼树*/
PHtTree huffman(int m, int *w) {
PHtTree pht;
int i, j, x1, x2, m1, m2;
pht = (PHtTree)malloc(sizeof(struct HtTree)); /* 创建空哈夫曼树 */
if (pht == NULL) {
printf("Out of space!! \n");
return pht;
}
for (i = 0; i < 2*m-1; i++) {/* 置初态 */
pht->ht[i].llink = -1;
pht->ht[i].rlink = -1;
pht->ht[i].parent = -1;
if (i < m)
pht->ht[i].ww = w[i];
else
pht->ht[i].ww = -1;
}
for ( i = 0; i < m-1; i++) {/* 每循环一次构造一个内部结点 */
m1 = MAXINT;
m2 = MAXINT;/* 相关变量赋初值 */
x1 = -1;
x2 = -1;
for (j = 0; j < m+i; j++) /* 找两个最小权的无父结点的结点 */
if (pht->ht[j].ww < m1 && pht->ht[j].parent == -1) {
m2 = m1;
x2 = x1;
m1 = pht->ht[j].ww;
x1 = j;
}
else if (pht->ht[j].ww < m2 && pht->ht[j].parent == -1) {
m2 = pht->ht[j].ww;
x2 = j;
}
pht->ht[x1].parent = m+i; /* 构造一个内部结点 */
pht->ht[x2].parent = m+i;
pht->ht[m+i].ww = m1+m2;
pht->ht[m+i].llink = x1;
pht->ht[m+i].rlink = x2;
pht->root = m+i;
}
return pht;
}
int main() {
int m = 0, j = 0, i = 0, parent = 0;
int* w;
PHtTree pht;
printf("please input m = ");/*输入外部结点个数*/
scanf("%d", &m);
if (m < 1) {
printf("m is not reasonable!\n");
return 1;
}
w = (int *)malloc(sizeof(int)*m);
if (w == NULL) {
printf("overflow!\n");
return 1;
}
printf("please input the %d numbers:\n",m);/*输入权值*/
for (j = 0; j < m; j++)
scanf("%d", w+j);
pht = huffman(m, w);
for (j = 0; j < m; j++) {
printf("the Reverse code of the %d node is:", j+1);/*得到的编码应倒过来*/
i = j;
while (pht->ht[i].parent != -1) {
parent = pht->ht[i].parent;
if (pht->ht[parent].llink == i)
printf("0");
else
printf("1");
i = parent;
}
printf("\n");
}
return 0;
}
//张乃孝书上的。
Student02370236
2005-06-07
打赏
举报
回复
又是在这里讨课程设计的吗?
数据结构的书上不是有很详细的算法吗
有关
赫夫曼树
的构造与操作
有关
赫夫曼树
,有关
赫夫曼树
,有关
赫夫曼树
,有关
赫夫曼树
赫夫曼树
构建过程及赫夫曼编码的实现
赫夫曼树
构建 赫夫曼编码 数据结构 C语言 动画 用C语言动画演示
赫夫曼树
的构建以及赫夫曼编码的实现
java数据结构算法
稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫...
赫夫曼树
、赫夫曼编码、多路查找树(B树B+树和B*树)、图、图的DFS算法和BFS、程序员常用10大算法、二分查找算法(非递归)、分治算法、动态规划...
二叉树、
赫夫曼树
二叉树、
赫夫曼树
,自己用C++实现,包括树的创建、遍历等常用操作。
数据结构
赫夫曼树
数据结构
赫夫曼树
,数据结构试验需要上交的一个实验
C语言
69,368
社区成员
243,081
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章