【数据结构】构造哈夫曼树

【数据结构】构造哈夫曼树_第1张图片

代码实现: 

#include
#define ERROR 0
#define OK 1
using namespace std;

typedef struct{
	int weight;
	int parent,lch,rch;
}HTNode,*HuffmanTree;


//找1-n-1个结点中权重最小的两个结点 
void Select(HuffmanTree HT,int n,int &s1,int &s2){
	int i,j,min1,min2;
	//找s1 
	for(i=1;i<=n;i++){
		if(HT[i].parent==0){   //初始化min1:前n-1个结点中第一个双亲为0的结点 
			min1=i;
			break;
		}	
	}	
	for(j=min1+1;j<=n;j++){
		if(HT[j].parent==0)    //再找到一个双亲为0的结点 
			if(HT[j].weight>HT[i].weight;	
	}
	
	for(int i=n+1;i<=m;i++){
		Select(HT,i-1,s1,s2);   //选最小结点s1,s2 
		HT[s1].parent=i; HT[s2].parent=i;  //修改s1、s2结点的parent 
		HT[i].lch=s1;HT[i].rch=s2;    //修改i结点的左右孩子 
		HT[i].weight=HT[s1].weight+HT[s2].weight;  //修改i结点的权重
	} 
	return OK;
} 


int main(){
	HuffmanTree HT;
	int n;
	cout<<"输入结点数:";
	cin>>n; 
	cout<<"请输入权重:";
	CreateHuffmanTree(HT,n);
	
	//cout<<"各结点权重依次为:"<

运行结果:

【数据结构】构造哈夫曼树_第2张图片

你可能感兴趣的:(数据结构(c++),c++,数据结构,c++,算法)