构造哈夫曼树例题解析_如何构造哈夫曼树

构造哈夫曼树例题解析_如何构造哈夫曼树哈夫曼树构造算法的实现先考虑如何存储:既可以链式也可以顺序,但顺序存储结构(数组)简单点这里用一维结构数组,结构数组是因为我们要保存的结点的值比较多,先看结点的类型定义那几

哈夫曼树构造算法的实现   
构造哈夫曼树例题解析_如何构造哈夫曼树   先考虑如何存储:既可以链式也可以顺序,但顺序存储结构(数组)简单点   这里用一维结构数组,结构数组是因为我们要保存的结点的值比较多,先看结点的类型定义   那几个值?每一个都要知道他的权值weight是多少,双亲parent是谁,左右孩子lch,rch是谁,所以4个值,定义成一个结构类型   
构造哈夫曼树例题解析_如何构造哈夫曼树   数组如图:它有多大?它有2n-1个素(n个结点进行n-1次合并……)为了简单,我们不使用0下标,所以数组的大小为2n,从1到2n-1,我们不用0就可以了   
构造哈夫曼树例题解析_如何构造哈夫曼树   每一个素有4个成员,我们用指针类型–哈夫曼树*Huffman来定义一个H:Huffman H,h就可以表示一个指针,或者数组   
构造哈夫曼树例题解析_如何构造哈夫曼树   让第一个结点的权值为5,同理继续……   
构造哈夫曼树例题解析_如何构造哈夫曼树   例子:7+8=15,就可以定义一个16的数组(0-15),只用1到15   
构造哈夫曼树例题解析_如何构造哈夫曼树   首先,所有素的双亲和孩子都为0(构造森林全是根),用0来表示没有,然后输入权值   
构造哈夫曼树例题解析_如何构造哈夫曼树   生成n-1个结点,用循环,因为我们这里有n个叶子,所以我们从n+1开始:i=n+1,我们共有2n-1,直到2n-1结束   
构造哈夫曼树例题解析_如何构造哈夫曼树   选两小造新树:2,3,生成的5在9号结点,删掉2,3……   
构造哈夫曼树例题解析_如何构造哈夫曼树   剩下parent为0,只有一个根,结束   
构造哈夫曼树例题解析_如何构造哈夫曼树   先初始化:1.左右孩子,parent设置为0;2.输入权值   
构造哈夫曼树例题解析_如何构造哈夫曼树   定义数组m=2n-1个素   2n-1在加1就是2m,这里0号不用,所以m+1   weighr要一个一个输入   
构造哈夫曼树例题解析_如何构造哈夫曼树   再n-1次合并,放在n+1到2n-1:   找到了,他们两个的双亲就是新产生的结点i:HT[s1].parent=i,HT[s2].parent=i   新产生节点的权重就是两个最小的权重的和:HT[i].weight=HT[s1].weight+HT[s2].weight   左孩子为s1,右孩子为s2:HT[i].lch=s1;HT[i].rch=s2   
构造哈夫曼树例题解析_如何构造哈夫曼树   
构造哈夫曼树例题解析_如何构造哈夫曼树   
构造哈夫曼树例题解析_如何构造哈夫曼树   Select函数具体的实现方法和本片完整的代码,如下文章:   c语言构造哈夫曼树-哈夫曼编码_快乐的孙悟空的博客-CSDN博客_c语言哈夫曼树   void Select(HuffmanTree &HT,int x){//选出无父结点,并且权值最小的两个结点,赋值给s1,s2   int i,min1=inf,min2=inf;   for(i=1;i<=x;i++){//找最小   if(HT[i].weight<min1&&HT[i].parent==0){min1=HT[i].weight;s1=i;}   }   for(i=1;i<=x;i++){//找次小   if(HT[i].weight<min2&&i!=s1&&HT[i].parent==0){   min2=HT[i].weight;s2=i;   }   }   }

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/53179.html

(0)
上一篇 2024年 9月 2日 上午7:43
下一篇 2024年 9月 2日

相关推荐

关注微信