#include <iostream>
#include <cstring>
using namespace std;
//霍夫曼树的创建
//步骤1:从要参与建树的结点中选出两个权值最小的结点
//步骤2:将选出的两个结点合并成一个新结点,权值为这两结点权值之和
//步骤3:将新生成的结点加入到参与建树的结点中去,再从中选出两个最小结点(前面选过的结点不再考虑)
//步骤4:以此类推......
//建树
//注意点1:n个结点参与建树,则需要n-1次(即循环次数)
//注意点2:n个结点参与建树,建树完成后共有有2n-1个结点
//编码
//注意点1:用一个二维数组来保存;
//注意点2:掌握strcpy和strncpy的用法
typedef struct huffman
{
int weight;
int parent,lchild,rchild;
}HtNode,*huffmanTree;
/****************选出两个最小结点参与建树**************************/
void selectNode(huffmanTree &HT ,int t , int &s1 , int &s2 )
{
//选出权值最小的两个结点的下标值s1和s2
s1=0;
s2=0;
HT[s1].weight=999999; //因为0位置我们本来没用到,所以给他设置一个不可能的值
HT[s2].weight=999999; //因为0位置我们本来没用到,所以给他设置一个不可能的值
for(int i=1;i<=t ;i++)
{
//此循环,选出这一轮最小的结点下标s1
if(HT[i].parent == 0 && HT[i].weight < HT[s1].weight)
s1=i;
}
for(int i=1;i<=t;i++)
C++数据结构-创建霍夫曼树和霍夫曼编码
最新推荐文章于 2024-04-21 22:27:18 发布
#include &amp;lt;iostream&amp;gt;using namespace std;//霍夫曼树的创建//步骤1:从要参与建树的结点中选出两个权值最小的结点//步骤2:将选出的两个结点合并成一个新结点,权值为这两结点权值之和//步骤3:将新生成的结点加入到参与建树的结点中去,再从中选出两个最小结点(前面选过的结点不再考虑)建树//步骤4:以此类推......//注意点1:n个...
摘要由CSDN通过智能技术生成