引入
概述
基本概念
示例
算法实现
存储结构
具体步骤
示例
初始化
合并
示例
代码整合:
//哈夫曼树的建立
//定义类型:权值+双亲结点+左右孩子结点
typedef struct {
int weight;
int parent;
int lchild,rchild;
}Hnode,*huffmantree;
//建立
1.判断有结点:
建空数组,初始为空
输入权值
合并:找树中两个最小结点,改双亲,改左右孩子,改权值
2.否则返回函数头
void select(haffmantree t,int i-1,int &s1,int &s2){//后期补!!!!
}
void built(huffmantree t,int n){
if(n<1) return;
int m=2*n-1;
t=new huffmantree[m+1];//下标由1开始存
for(int i=1;i<=m;++i){//初始
t[i].lchild=0;
t[i].rchild=0;
t[i].parent=0;
}
for(int i=1;i<=m;++i)
cin>>t[i].weight;
for(int i=n+1;i<=m;++i){
select(t,i-1,s1,s2);//从1-i-1中找两个最小的结点,并返回编号
//改双亲域
t[s1].parent=i;
t[s2].parent=i;
//改孩子域
t[i].lchild=s1;
t[i].rchild=s2;
t[i].weight=t[s1].weight+t[s2].weight;//改权值
}
}