哈夫曼树(简单建立)

哈夫曼树

本篇仅为建树核心代码,其余代码与之前建树代码均类似。

Tree* create(int a[],int n)
 {
    Tree *root=(Tree*)malloc(sizeof(Tree)*(n+1));
     int i;
     for(i=0;i<n;i++)
     {
        root[i].data=a[i];//数组a只起到一个赋值的作用
         root[i].leftchild=NULL;
         root[i].rightchild=NULL;
     }
     Tree *p=(Tree*)malloc(sizeof(Tree));
     p=&root[0];//先将最小权的结点作为第一结点从下向上建立哈夫曼树 
    for(i=1;i<n;i++)//剩有n-1个带权结点,依次将权值相加建立新结点 
	{
		Tree *q=(Tree*)malloc(sizeof(Tree));
		q->leftchild=&root[i];
		q->rightchild=p;
		q->data=(p->data+root[i].data);
		p=q;   
     }
     return p;//返回最后一个结点,即树的根 
 }

m
从下至上由权值小的依次建立,每建立一个新结点,将状态转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值