`

哈弗曼树(3)

 
阅读更多

#include<stdio.h>
#define max 100
#define n 5
typedef struct No{
double weight;
int lchild,rchild,parent;
} hufmNode;
hufmNode tree[n];
void creathufm()
{
int i,j,p1,p2;
double min1,min2;
for(i=0;i<n*2-1;i++){//初始化
tree[i].lchild=0;
tree[i].rchild=0;
tree[i].parent=0;
tree[i].weight=0;
}
for(i=0;i<n;i++) //父节点的位置
scanf("%lf",&tree[i].weight);
for(i=n;i<2*n-1;i++){//找出子节点最小的两个
min1=min2=max;
p1=p2=0;
for(j=0;j<i;j++)
if(tree[j].parent==0)//选没有父亲的节点
if(min1>tree[j].weight){
p2=p1;
min2=min1;
p1=j;
min1=tree[j].weight;
}
else if(tree[j].weight>min2){
p2=j;
min2=tree[j].weight;
}
tree[j].lchild=p1+1;//分别写入左右孩子,和父亲
tree[j].rchild=p2+1;
tree[p1].parent=i+1;
tree[p2].parent=i+1;
tree[j].weight=tree[p1].weight+tree[p2].weight;
}
for(i=0;i<2*n-1;i++)
printf("%.2lf ",tree[i].weight);
}
main()
{
creathufm();
return 0;
}

分享到:
评论

相关推荐

    哈弗曼树的建立 C++代码

    3. **构建哈弗曼树函数**:`Haffman()`函数实现哈弗曼树的构建过程。它通过不断选择权重最小的两个节点进行合并,直到构建出完整的哈弗曼树。每次合并后,新节点的权重更新为两子节点权重之和,同时标记这两个子节点...

    哈弗曼树的代码

    哈弗曼树哈弗曼树哈弗曼树哈弗曼树哈弗曼树哈弗曼树哈弗曼树哈弗曼树哈弗曼树

    关于哈弗曼树的一个算法

    1.jpg、2.jpg和3.jpg可能包含的是哈弗曼树的可视化示例,帮助理解哈弗曼树的构造结果或者编码过程。 使用哈弗曼树的主要优点在于: - **压缩效率高**:对于具有不同频率的字符,哈弗曼编码可以实现较高的压缩率,...

    哈弗曼树进行压缩编码

    3. **生成编码**:从哈弗曼树的根节点出发,按照左子节点代表“0”,右子节点代表“1”的规则,为每个字符生成唯一的路径,这条路径就是字符的哈弗曼编码。 4. **压缩文件**:将原始文件中的每个字符替换为对应的...

    哈弗曼树及编码 C语言实现

    在C语言下实现哈弗曼树的创建并进行哈弗曼编码,同时输出哈弗曼编码。

    哈弗曼树C++源代码

    哈弗曼树(Huffman Tree),也称为最优二叉树,是一种特殊的二叉树,用于数据编码和解码,尤其在数据压缩领域有着广泛应用。它是由哈弗曼在1952年提出的一种构建方法,旨在最小化带权路径长度(WPL),即树中所有...

    C++哈弗曼树

    在IT领域,哈弗曼树(Huffman Tree)是一种特殊的二叉树,也称为最优二叉树或最小带权路径长度树(Minimum Weighted Path Length Tree)。它在数据压缩、编码优化等方面有广泛应用,比如在文件存储和传输时,通过...

    哈弗曼树的建立及哈弗曼编码的生成 c++实现

    3. **构建哈弗曼树**:通过不断合并最小的两个节点,构建出哈弗曼树。这个过程可以使用递归或迭代的方式完成。在C++中,可以使用`std::priority_queue`来实现最小堆。 4. **生成编码**:遍历哈弗曼树,通常从根节点...

    数据结构之哈弗曼树实现压缩

    哈弗曼树(Huffman Tree),也称为最优二叉树,是数据结构中的一种特殊树形结构,主要用于数据编码和解码,特别是用于数据压缩。它通过构建一棵权值最小的二叉树来达到最高效的编码效果。在哈弗曼树中,频率较高的...

    C++哈弗曼树!哈弗曼树

    3. 重复步骤2,直到优先队列中只剩下一个节点,这个节点就是哈弗曼树的根节点。 哈弗曼编码的生成是在哈弗曼树构建完成后进行的。通过从根节点到每个叶子节点的路径,我们可以为每个叶子节点分配一个二进制编码,...

    c++哈弗曼树的解码与编码

    3. **生成哈弗曼编码**:从哈弗曼树的根节点开始,对每个字符进行深度优先搜索(DFS)或广度优先搜索(BFS),左分支代表0,右分支代表1,这样就能得到每个字符的哈弗曼编码。结果可以存储在关联数组或字典中,键为...

    数据结构哈弗曼树课程设计

    3. **合并最小树**:选取两个频率最小的树进行合并,形成一个新的哈弗曼树,新树的频率为两棵树的频率之和,新树的根节点没有子节点。重复此过程直到只剩下一棵树。 4. **构建编码**:从根节点到每个叶子节点的路径...

    用C语言实现哈弗曼树(数据结构课程设计)

    3. **构建哈弗曼树的步骤** - **创建优先队列**:使用最小堆实现,用于存储待合并的节点。初始时,队列中包含所有叶子节点。 - **合并节点**:每次从队列中取出两个权重最小的节点,创建一个新的内部节点,其权重...

    哈弗曼树编码课程设计

    哈弗曼树编码是一种高效的前缀编码方法,广泛应用于数据压缩和通信领域。在这个课程设计中,我们将深入探讨哈弗曼编码的原理、构建过程以及如何实现编码与译码功能,同时支持文件的读写操作。 哈弗曼树,又称为最优...

    哈弗曼树解压与压缩

    用哈弗曼树进行文件压缩与解压,学习数据结构时可结合进行更深刻理解

    哈弗曼树的生成(编码)

    3. **重复步骤2**:重复上述步骤,每次从堆中取出两个最小的节点进行合并,直到堆中只剩下一个节点,这个节点就是哈弗曼树的根节点。 在哈弗曼树构建完成后,我们可以进行编码过程: 1. **深度优先遍历**:通过...

    基于哈弗曼树的字符统计

    4. **重复步骤3**:重复这个过程,直到堆中只剩下一个节点,这个节点就是哈弗曼树的根节点。 5. **生成编码**:从根节点到每个叶子节点的路径形成该叶子节点字符的哈弗曼编码,左分支代表0,右分支代表1。 在这个...

    用C++语言写的关于用哈弗曼树编码问题的程序

    哈弗曼编码是一种高效的数据压缩方法,它利用了字符出现频率的不同来构建最优的二叉树,也称为哈弗曼树。在这个C++程序中,我们将会深入理解哈弗曼编码的原理及其在实际编码过程中的应用。 首先,我们要知道哈弗曼...

    C++实现哈弗曼树的建立

    3. **选择函数 `select`**: ```cpp void select(HT* T, int i, int& s1, int& s2) { unsigned long min1, min2; min1 = 65535; // 找到第一个最小的权重值 for (int j = 1; j ; j++) { if ((min1 &gt; T[j]....

Global site tag (gtag.js) - Google Analytics