(复习)数据结构——哈夫曼树(huffmantree)

哈夫曼树的定义

给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。
哈夫曼树的性质

1.没有度为1的节点
2.对于同一组权值,存在不同构的哈夫曼树
3.n个叶子节点的哈夫曼树共有2*n-1个结点

哈夫曼树实现

struct ElemType
{
    int weight;
    int parent,lchild,rchild;
};

void HuffmanTree(ElemType huffman[],int w[],int n)
{
    int i,k,i1,i2;
    for(i=0;i<2*n-1;i++)
    {
        huffman[i].parent=-1;
        huffman[i].lchild=huffman[i].rchild=-1;
    }
    for(i=0;i<n;i++){
        huffman[i].weight=w[i];
    }
    for(i=n;i<2*n-1;i++){
        Select(huffman,i1,i2);
        huffman[i].weight=huffman[i1].weight+huffman[i2].weight;
        huffman[i1].parent=i;
        huffman[i2].parent=i;
        huffman[i].lchild=i1;
        huffman[i].rchild=i2;
    }
}
发布了247 篇原创文章 · 获赞 22 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43658924/article/details/102808013