C语言Huffman树 帮忙找下错吧

来源:百度知道 编辑:UC知道 时间:2024/05/25 06:43:49
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//????????
typedef struct HuffmanNode
{
char data;
int weight;
int parent;
int lchild;
int rchild;
}HuffmanNode,*HuffmanTree;
typedef char **HuffmanCode;

void select(HuffmanTree HT,int n,int *s1,int *s2)
{
int i;
(*s1)=(*s2)=0;
for(i=1;i<=n;i++){
if(HT[i].weight<HT[(*s2)].weight&&HT[i].parent==0&&(*s2)!=0)
{
if(HT[i].weight<HT[(*s1)].weight)
{
(*s2)=(*s1);
(*s1)=i;
}
else (*s2)=i;
}
if(((*s1)==0||(*s2)==0)&&HT[i].parent==0)
{
if((*s1)==0)
(*s1)=i;
else if((*s2)==0)
{
if(HT[i].weight<HT[(*s1)].weight)
{
(*s2)=(*s1);
(*s1)=i;
}
else (*s2)=i;
}
}
}
if((*s1)>(*s2))//???0?1
{
i=(*s1);

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <set>
#include <vector>
#include <string>
using namespace std;
//????????
struct HuffmanNode
{
int data;
int weight;
HuffmanNode *parent,*lc,*rc;
string scode;

HuffmanNode() {
lc=rc=parent=NULL;
data=0;
weight=0;
}
};

typedef char **HuffmanCode;
set<HuffmanNode *> sNode;//待选节点
vector<HuffmanNode *> vAll;
void selectSmall(HuffmanNode **s1,HuffmanNode **s2)
{//选出最小的两个节点
HuffmanNode *t1;
set<HuffmanNode *>::iterator si,sE;
sE=sNode.end();
for(si=sNode.begin(),t1=(*si);si!=sE;++si) {
if ((*si)->weight<t1->weight) {
t1=(*si);
}
}
*s1=t1;
sNode.erase(t1);

sE=sNode.end();
for(si=sNode.begin(),t1=(*si);si!=sE;++si) {
if ((*si)->weig