#include<stdio.h>
#include<stdlib.h>
typedef struct{
char data;
int weight;
int lc,rc,pr;
}htNode;
htNode *Input(int &n){
htNode *p;
int i;
printf("初始结点个数:");
scanf("%d",&n);
n=n*2-1;
p=(htNode *)malloc(n*sizeof(htNode));
printf("元素 权值\n");
for(i=0;i<(n+1)/2;i++){
getchar();//清空缓冲区
scanf("%c %d",&p[i].data,&p[i].weight);
}
return p;
}
void seekMin(htNode *ht,int n,int &m1,int &m2){
int i,M1=9999,M2=9999;
htNode *p=ht;
for(i=0;i<n;i++){
if(p[i].pr==-1){
if(p[i].weight<M1){
M2=M1;
m2=m1;
M1=p[i].weight;
m1=i;
}else if(p[i].weight<M2){
M2=p[i].weight;
m2=i;
}
}
}
}
void creatHT(htNode *ht,int n){
int i,m1,m2;
htNode *p=ht;
for(i=0;i<n;i++){
p[i].lc=p[i].rc=p[i].pr=-1;
}
for(i=(n+1)/2;i<n;i++){
seekMin(p,i,m1,m2);
p[i].weight=p[m1].weight+p[m2].weight;
p[i].data='0';
p[i].lc=m1;
p[i].rc=m2;
p[m1].pr=p[m2].pr=i;
}
}
void prt(htNode *ht,int n){
htNode *p=ht;
int i;
printf("下标\t元素\t权值\t双亲\t左\t右\n");
for(i=0;i<n;i++){
printf("%d\t%c\t%d\t%d\t%d\t%d\n",i,p[i].data,p[i].weight,p[i].pr,p[i].lc,p[i].rc);
}
}
int main(){
htNode *ht;
int n;
ht=Input(n);
creatHT(ht,n);
prt(ht,n);
}
若有问题欢迎提出!