构建哈夫曼树代码

本文介绍了如何使用常用数据结构和算法构建哈夫曼树,避免了静态链表带来的额外学习负担。通过定义哈夫曼节点,创建哈夫曼节点数组并排序,递归构建哈夫曼树。此外,还提及了如何统计哈夫曼树的节点总数及应对变形应用。
摘要由CSDN通过智能技术生成

题目来源于南师大gis考研,由于网上的代码多数是基于静态链表来完成的,而静态链表本身又是南师的低频考点。而哈夫曼树又是南师的重点考点,若考虑使用静态链表完成,则需要深入学习静态链表的知识。

若如此做,则将一个考点变成了两个考点,增加了备考负担。

但是若学有余力,静态链表也值得一学,因为曾经单独出过静态链表的题目(十几年就出过一次)

因此我选择用一些常用的知识来构建哈夫曼树:

首先是哈夫曼树的节点:成员变量包括,数据变量,左右孩子指针。(按照题目需要可以增加父亲节点)

然后构建一个哈夫曼节点数组。

该数组用于储存还未成树的节点,或者由两个旧节点组合出的新节点。

然后编写一个排序函数,用于对哈夫曼节点数组排序,使得哈夫曼节点按照数据由大到小排,则每次选出最后两个节点,即可进行哈夫曼树的构建。

然后就是利用递归函数构建哈夫曼树(非常简单,一看就懂)。

typedef struct HFNode{//建立哈夫曼树的节点 
	int data;
	struct HFNode *rchild,*lchild;
}; 
HFNode HFtree[MaxSize];//建立一个保存初始叶节点的数组,并在此数组的基础上进行哈夫曼树的构造 
void HFNode_sort(HFNode H[]){
	int flat=0;
	int len=length(H);//获得数组有效元素的个数 
	for(int i=len-1;i>1;i--){//冒泡排序对节点数组进行排序,按由大到小排 
		flat=0;//创建一个元素用于记录某一趟是否有元素交换 
		for(int j=i;j>=len-i;j-
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值