哈夫曼树
#include<iostream.h>
#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#define INT_MAX 100000
#define N 10000
typedef struct HTNode//类型定义
{
int weight;
int parent;
int lchild;
int rchild;
char data;
char code[20];
}*HuffmanTree;
void Select(HuffmanTree HT,int end,int &s1,int &s2) //查找权值最小的两个字符序号
{
int i,j,t;
int min1=INT_MAX;
int min2;
for (i=1;i<=end;i++)
{
if (HT[i].parent==0&&HT[i].weight<min1)
{
s1=i;
min1=HT[i].weight;
}
}
min2=INT_MAX;
for(j=1;j<=end;j++)
{
if (HT[j].parent==0&&(s1!=j)&&min2>HT[j].weight)
{
s2=j;
min2=HT[j].weight;
}
}
if(s1>s2)
{
t=s1;
s1=s2;
s2=t;
}
}
void Initialization(HuffmanTree &ht,int a,int b) //初始化HuffmanTree,建立该树
{
int i,start,f,c,s1,s2;
char *cd;
char *str;
int *w;
str=new char[a+1];
w=new int[a+1];
cout<<"输入源字符:"<<endl;
for(i=1;i<=a;i++)
//初始化输入字符时,注意:应连续输入,再按回车键!
cin>>str[i];
cout<<"输入权值:"<<endl;