哈夫曼树的构建(c语言描述)

哈夫曼树又称最优树,是一类带权路径长度最短的路。

哈夫曼树结构:

typedef struct Htree{
    int data;//数据域,也可以不要,我这里是用来存放下标
    int parent,lchild,rchild;//父亲下标,左右儿子下标
    int weight;//权重
}Htree;
typedef struct{
	Htree TData[MAXSIZE];//哈夫曼树 
	int size;//这是该树的大小,n*2 
}HFMtree;

 

思路:(我个人这里用到的是堆栈,思路仁者见仁,智者见智)

1.将权重的集合(数组或其他集合)进行排序。

2.一一入栈,栈顶保证存放的是权重最小的那两个结点。

3.进入循环,将栈顶最小权重的两个结点弹出,弹出之后权重相加得到新结点。

4.新结点入栈。

5.将堆栈排序,栈顶保证存放的是权重最小的那两个结点。

6.重复 3,4,5直到栈为空.

 

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 1000
/*
哈夫曼树的构建 
*/
typedef struct Htree{
    int data;
    int parent,lchild,rchild;
    int weight;
}Htree;
typedef struct{
	Htree TData[MAXSIZE];//哈夫曼树 
	int size;//这是该树的大小,n*2 
}HFMtree;
typedef struct{
	Htree Array[MAXSIZE];
	int top;/
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值