完全实现构造哈夫曼树、进行哈夫曼编码是一个浩大的工程。
对于初学者,可能好久都不能把哈夫曼树构造出来。
下面我们手工构造一棵基于二叉链表的树,且假定其就是哈夫曼树。
然后,我们采用自上而下递归的方法对其进行编码。
直接上代码啦。
#include <string>
#include <iostream>
using namespace std;
struct node
{//树的结点结构。二叉链表表示法
char data;
node *lchild,*rchild;
};
void PreOrder(node *T)
{//二叉树的先序遍历
if(T==0)
return;
cout<<T->data<<" ";
PreOrder(T->lchild);
PreOrder(T->rchild);
}
void HuffmanCoding(node *T,string &s)
{//递归求哈夫曼编码
if(T->lchild==0 && T->rchild==0)
{
cout<<T->data<<" "<<s<<"\n";
return;
}
string tmp;
tmp=s;
if(T->lchild!=0)
{//左分支标0
s.push_back('0');
HuffmanCoding(T->lchild,s);
s=tmp;
}
if(T->rchild!=0)
{//右分支标1
s.push_back('1');
HuffmanCoding(T->rchild,s);
s=tmp;
}
}
int main( )
{
node a,b,c,d,e;//定义5