huffman树 C++代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include
using namespace std;
const int n=5;
struct HTNODE
{
int weight;
char ch;
int parent,lchild,rchild;
};

struct CODETYPE
{
char bits[n];
int start;
int weight;
char ch;
};
class HUFFMAN
{
private:
HTNODE tree[2*n-1];
CODETYPE code[n];
public:
HUFFMAN()
{
int i;
for(i=0;i<2*n-1;i++)
{
tree[i].parent=-1;
tree[i].lchild=-1;
tree[i].rchild=-1;
}
}
void CreateHuffmantree();//创建赫夫曼树
void PrintHuffmantree();//输出赫夫曼树
void HuffManCode();//赫夫曼树的编码
void PrintCode();//输出赫夫曼编码
void Decode();//赫夫曼树译码
};
void HUFFMAN::CreateHuffmantree()
{
int i1,i2,firstsmall,secondsmall,i,k;
cout<<"请输入赫夫曼树的叶子结点的权值"<for(i=0;i>tree[i].weight;
cout<<"请输入赫曼树结点对应的字符";
for(i=0;i>tree[i].ch;
for(k=n;k<2*n-1;k++)
{
firstsmall=32767;
secondsmall=32767;
i1=i2=-1;
for(i=0;i{
if(tree[i].parent==-1)
if(tree[i].weight{
secondsmall=firstsmall;
firstsmall=tree[i].weight;
i2=i1;
i1=i;
}
else if(tree[i].weight{
secondsmall=tree[i].weight;
i2=i;
}
}
tree[k].weight=tree[i1].weight+tree[i2].weight;
tree[i1].parent=k;
tree[i2].parent=k;
tree[k].lchild=i1;
tree[k].rchild=i2;
}
}

void HUFFMAN::PrintHuffmantree()
{
int i;
for(i=0;i<2*n-1;i++)
{
cout.width(3); cout<cout.width(5); cout<cout.width(5); cout<cout.width(5); cout<cout.width(5); cout<cout<}
cout<}

void HUFFMAN::HuffManCode()
{
int i,c,p;
CODETYPE cd;
for(i=0;i{
cd.start=n;
c=i;
p=tree[i].parent;
while(p!=-1)
{
cd.start--;
if(tree[p].lchild==c) cd.bits[cd.start]='0'; else cd.bits[cd.start]='1';
c=p;
p=tree[p].parent;
}
cd.ch=tree[i].ch;
cd.weight=tree[i].weight;
code[i]=cd;
}
}

void HUFFMAN::PrintCode()
{
int i,j;
for(i=0;i{
cout.width(3);cout<cout.width(5);cout<cout.width(5);cout<cout.width(6);
for(j=code[i].start;jcout<
}
}

void HUFFMAN::Decode()
{
int i;//从根到结点
char b;
char endflag='@';
i=2*n-2;
cout<<"请输入需译码的0或1

串,以@为结束";
cin>>b;
while(b!=endflag)
{
if(b=='0') i=tree[i].lchild; else i=tree[i].rchild;
if(tree[i].lchild==-1) { cout<cin>>b;
}
cout<}
void main()
{
HUFFMAN tree;
tree.CreateHuffmantree();
tree.PrintHuffmantree();
tree.HuffManCode();
tree.PrintCode();
tree.Decode();
}

相关文档
最新文档