数据结构与算法 (七) 哈夫曼树(Huffman)与哈夫曼编码

1.算法思想

         哈夫曼树又称最优二叉树,是一种带权路径长度最短的二叉树。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的路径长度是从树根到每一结点的路径长度之和,记为WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln),N个权值Wi(i=1,2,...n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为Li(i=1,2,...n)

2.算法实现

#include 
#include 
//最小生成树  应用 哈夫曼编码
struct huffmannode
{
    int weight;
    int tag,LeftChild,RightChild;
};

typedef  struct huffmannode Huffmannode;

void InitHuffmannode(Huffmannode *h,int t,int l,int r)
{
    h->tag=t;
    h->LeftChild=l;
    h->RightChild=r;
}
struct huffmantree
{
    int root;
};

typedef struct huffmantree Huffmantree;

void InitHuffmantree(Huffmantree *ht,int r)
{
    ht->root=r;
}
//创建哈夫曼树
void makeHuffmantree(Huffmantree *ht,int a[],Huffmannode b[],int n)
{
    int i,j,m1,m2,x1,x2;
    //逐步构造 Huffman 树*/
    for(i=0; iroot=2*n-2;
}
//哈夫曼编码就是利用哈夫曼树生成前缀唯一的不等长编码(从根部开始左子树是0右子树为1)
int main()
{
    printf("哈夫曼编码就是利用哈夫曼树生成前缀唯一的不等长编码(从根部开始左子树是0右子树为 \n");
    return 0;
}

 

 

你可能感兴趣的:(数据结构与算法)