Huffman.h
#include
#include
#include
#include
#define N 100
#define M 2*N-1
using namespace std;
typedef char *HuffmanCode[N+1];
typedef struct
{
int weight;
int parent,lchild,rchild;
}BTNode,HuffmanTree[M+1];
void select(HuffmanTree HT,int n,int s1,int s2){
int min1=1000;
int min2=1000;
int a1,a2;
for(int i=1;i<=n;i++){
if(HT[i].parent==0&&min1>HT[i].weight){
min1=HT[i].weight;
s1=i;
}
}
for(int i=1;i<=n;i++){
if(i!=s1&&HT[i].parent==0){
if(min2>HT[i].weight){
min2=HT[i].weight;
s2=i;
}
}
}
}
//创建哈夫曼树
void CrdtdHuffmanTree(HuffmanTree HT,int n,int w[]){
int m=2*n-1;
int s1,s2;
for(int i=1;i<=n;i++){
HT[i].weight=w[i];
HT[i].parent=0;
HT[i].lchild=0;
HT[i].rchild=0;
}
for(int i=n+1;i<=m;i++){
HT[i].weight=0;
HT[i].parent=0;
HT[i].lchild=0;
HT[i].rchild=0;
}
for(int i=n+1;i<=m;i++){
select(HT,i-1,s1,s2);
HT[i].weight=HT[s1].weight+HT[s2].weight;
HT[i].lchild=s1;
HT[i].rchild=s2;
HT[s1].parent=i;
HT[s2].parent=i;
}
}
//哈夫曼编码
void CrdHuffmanCode(HuffmanTree HT,HuffmanCode HC,int n){
char *cd;
cd=(char *)malloc(n*sizeof(char));
cd[n-1]='\0';
for(int i=1;i<=n;i++){
int start=n-1;
int c=i;
int p=HT[i].parent;
while(p!=0){
--start;
if(HT[p].lchild==c){
cd[start]='0';
}else{
cd[start]='1';
}
c=p;
p=HT[p].parent;
}
HC[i]=(char*)malloc((n-start)*sizeof(char));
strcpy(HC[i],&cd[start]);
}
free(cd);
}
#include
#include "Huffman.h"
using namespace std;
int main() {
HuffmanTree HT;
HuffmanCode HC;
int n;
cout<<"请输入创建多少个叶子结点:"<>n;
int w[100];
cout<<"请输入对应结点的权值:"<for(int i=1;i<=n;i++){
cin>>w[i];
}
CrdtdHuffmanTree(HT, n,w);
CrdHuffmanCode(HT,HC,n);
for(int i=1;i<=2*n-1;i++){
cout<<"结点 weight parent lchild rchild"<" "<" "<" "<" "<for(int i=1;i<=n;i++){
cout<return 0;
}
你写了这么一大堆代码才想起要调试吗
一步一步来,输入完直接打印,看输入有没有问题
每一步执行完,看是不是符合预期
没问题了再往下做
学编程先学调试
不会调试,那你写出来的代码都是没办法用的
你可以把报错贴出来,方便找错误
兄弟,你这一大段代码贴出来的同时,把错误信息也弄一下啊