哈夫曼树又称最优树,是一类带权路径长度最短的路。
哈夫曼树结构:
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;/