哈夫曼树的构造

Posted ilovetheworld

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了哈夫曼树的构造相关的知识,希望对你有一定的参考价值。

#include<iostream>
#include<string> 
using namespace std;
struct ElemType
{
    char date;
    int weight;
}; 

struct HTNode
{
    char data;
    int weight;
    int parent,lchild,rchild;
    string code;
};

HTNode *createTree(ElemType *w,int n)//哈夫曼树构造     
{
    HTNode *ht=new HTNode[2*n];
    int i,p1,p2;
    for(i=1;i<n;i++)//叶子节点初始化 
    {
       ht[i].data=w[i].date;
       ht[i].weight=w[i].weight;
       ht[i].parent=ht[i].lchild=ht[i].rchild=0;
    }
    
    for(i=n+1;i<2*n;i++)//非叶子节点初始化 
    {
        ht[i].weight=ht[i].parent=ht[i].lchild=ht[i].rchild=0;
        
    }
    
    for(i=n+1;i<2*n;i++)
    {
        Select(ht,1,i,p1,p2);//选中权重最小的两个
        ht[p1].parent=ht[p2].parent=i;
        ht[i].lchild=p1;
        ht[i].rchild=p2;
        ht[i].weight=ht[p1].weight+ht[p2].weight; 
    }
    return ht;
}

void CreateCode(HTNode *ht,int n)
{
    ht[2*n-1].code="";
    for(int i=2*n-1;i>n;i--)
    {
        int left=ht[i].lchild;
        int right=ht[i].rchild;
        
        ht[left].code=ht[i].code+"0";
        ht[right].code=ht[i].code+"1";

    }
}

int main()
{

}

 

以上是关于哈夫曼树的构造的主要内容,如果未能解决你的问题,请参考以下文章

哈夫曼树的构造

哈夫曼树的构造

数据结构-----哈夫曼树的构造以及遍历

哈夫曼树(最优二叉树)详解与构造

哈夫曼树

构造哈夫曼树