您当前的位置: 首页 > 

刘一哥GIS

暂无认证

  • 6浏览

    0关注

    934博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

深夜爆肝:万字长文3种语言实现Huffman树(强烈建议三连)

刘一哥GIS 发布时间:2021-08-23 00:10:56 ,浏览量:6

文章目录
  • 一、C语言能干大事
    • 1. C语言下Huffman树的计算过程分析
    • 2. C语言下Huffman树的编程
  • 二、C#语言也不赖
    • 1. C#下Huffman类的设计
    • 2. C#中界面设计
    • 3. 建立测试数据并显示Huffman树
    • 4. 输入任意一组数据,完成构造Huffman树
  • 三、JavaScript语言不爱听了
    • 1. JavaScript下Huffman类的设计
    • 2. 把权重数据显示在一个表格里
    • 3. 为表格添加命令按钮
    • 4. 编写添加一行的程序
    • 5. 编写删除一行的程序
    • 6. 用表格中的数据生成Huffman树表
    • 7. 显示Huffman树表中的树

一、C语言能干大事

在这里插入图片描述

1. C语言下Huffman树的计算过程分析

例1 有权重集合分别是:5、29、7、8、14、23、3、11,计算Huffman树。

这个题目的计算过程如下:

(1)首先是把数据填写在以下表格里:

在这里插入图片描述 这个在编程中一定注意:空白格子里是NULL,这点不要搞错。

首先是寻找到两个最小权重的结点,找到的是第7、1号结点,权重合计是8,我们先标记这两个结点s=1(代表已经处理过了),并生成第9号结点,权重是8,并让第7、1号结点的父结点是9,第9号结点的左、右孩子分别是第7、1结点,就是如下表:

在这里插入图片描述 重复上面的过程,从头寻找s=0的结点里、权重最小的两个结点、就是第3、4号结点,权重合计是15,这样,标记这两个结点s=1,并生成第10号结点,权重是15,而第7、8的父结点是第10号结点,第10号结点的左右孩子是第3、4号结点,就是下表:

在这里插入图片描述 重复这个过程,处理到第15个结点,使其权重合计为100,就是:

在这里插入图片描述 最终这个树的计算到此结束,在这样的表中计算出的过程以及结果,就是我们下面编程的主要依据。

2. C语言下Huffman树的编程

针对前面介绍的表格,用C语言描述这样的表就是:

struct Huffman 
{
	int W,Parent,lChild,rChild,S;
};

对Huffman树,由于它是正则二叉树,所以有n个权重数据则必然有2*n-1个树结点。

有了表的C语言定义,则首先是寻找未标记的、权重最小的结点,如果这个表是H,则全部代码就是:

int FindMinNode(struct Huffman *H,int N)
{
	int i,W,Node;
	W=100;Node=0;
	if(H==NULL) return -1;
	for(i=0;i0&&H[i].W            
关注
打赏
1665586602
查看更多评论
0.0713s