码迷,mamicode.com
首页 > 其他好文 > 详细

哈夫曼树的构造

时间:2019-04-19 12:10:56      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:code   child   ret   for   sel   权重   i++   初始化   div   

#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()
{

}

 

哈夫曼树的构造

标签:code   child   ret   for   sel   权重   i++   初始化   div   

原文地址:https://www.cnblogs.com/ilovetheworld/p/10734845.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!