设计性实验六 哈夫曼树的操作
- 格式:doc
- 大小:125.50 KB
- 文档页数:16
数据结构哈夫曼树实验报告一、实验目的本次实验的主要目的是深入理解和掌握哈夫曼树的数据结构及其相关算法,通过实际编程实现哈夫曼编码和解码的过程,提高对数据结构的应用能力和编程技能。
二、实验环境本次实验使用的编程语言为 Python,开发工具为 PyCharm。
操作系统为 Windows 10。
三、实验原理哈夫曼树(Huffman Tree),又称最优二叉树,是一种带权路径长度最短的二叉树。
其基本思想是通过构建一棵二叉树,使得权值较大的节点离根节点较近,权值较小的节点离根节点较远,从而实现带权路径长度的最小化。
哈夫曼编码是一种基于哈夫曼树的变长编码方式。
对于给定的字符集及其出现的频率,通过构建哈夫曼树,可以为每个字符生成唯一的编码,使得编码后的字符串总长度最短。
在构建哈夫曼树的过程中,首先将每个字符及其出现的频率作为一个独立的节点,然后按照频率从小到大的顺序进行合并,每次合并两个频率最小的节点,生成一个新的节点,其频率为两个子节点频率之和。
重复这个过程,直到所有节点合并为一个根节点,最终得到的二叉树即为哈夫曼树。
四、实验步骤1、定义节点类```pythonclass Node:def __init__(self, char, freq, left=None, right=None):selfchar = charselffreq = freqselfleft = leftselfright = rightdef __lt__(self, other):return selffreq < otherfreq```这个节点类包含了字符、频率以及左右子节点的信息,并实现了小于比较方法,以便在构建哈夫曼树时进行节点的排序。
2、构建哈夫曼树```pythondef build_huffman_tree(freq_dict):nodes = Node(char, freq) for char, freq in freq_dictitems()while len(nodes) > 1:nodessort()left = nodespop(0)right = nodespop(0)merged_freq = leftfreq + rightfreqnew_node = Node(None, merged_freq, left, right)nodesappend(new_node)return nodes0```该函数根据字符频率字典创建节点列表,然后不断合并频率最小的两个节点,直到只剩下一个节点,即哈夫曼树的根节点。
实验4.2 最优二叉树(哈夫曼树)一、实验的目的要求1、了解树和哈夫曼树的特性,以及它们在实际问题中的应用。
2、掌握树和哈夫曼树的实现方法以及它们的基本操作,学会运用树和二叉树来解决问题。
二、实验的主要内容1、请设计一个算法,对于给定的n个结点的权值,建立一棵哈夫曼树。
具体要求如下:①算法输入:n个结点的权值。
②算法输出:哈夫曼树,打印出哈夫曼树的所有的结点序号、双亲结点、左孩子、右孩子和权值。
③测试数据:⑴设结点数n=7,权值分别为7、5、2、3、8、10、20;⑵设结点数n=8,权值分别为7、19、2、6、32、3、21、10。
三、解题思路建立哈夫曼树,然后对哈夫曼树进行操作。
四、原程序清单//c++程序#include<iostream>#include<string>#include<stdlib.h>using namespace std;#define MAXVAL 10000000 //定义一个足够大的数,方便之后的操作typedef int datatype;typedef struct//定义哈夫曼树结构体类型{double weight; //结点的权值int num;datatype lchild,rchild,parent; //结点的左、右孩子指针和父指针} htree;htree tree[100]; //定义全局变量,方便操作int n,m,flag=1; //n表示预处理的结点数,m表示处理的结点总数void create() //建立哈夫曼树的函数{int i,j,p1,p2; //i,j用于循环语句,p1、p2用于记录操作结果double small1,small2,w; //操作的中间变量cout<<"\n 请输入预处理的结点数:";cin>>n;m=2*n-1;if(n<=0){printf("\n*****************************************************\n");printf(" 这是一棵空树\n");printf("*****************************************************\n");return;}printf("\n*****************************************************\n");printf(" 请依次输入个结点的权值(各权值以空格隔开)\n");printf("*****************************************************\n");for(i=1;i<=n;i++) //为n个结点初始化{cin>>w;tree[i].weight=w;tree[i].num=i;tree[i].parent=0;tree[i].lchild=0;tree[i].rchild=0;}for(i=n+1;i<=m;i++){p1=0;p2=0;small1=MAXVAL;small2=MAXVAL;for(j=1;j<=i-1;j++)if(tree[j].parent==0){if(tree[j].weight<small1){small2=small1;small1=tree[j].weight;p2=p1;p1=j;}else if(tree[j].weight<small2){small2=tree[j].weight;p2=j;}}tree[p1].parent=i;tree[p2].parent=i;tree[i].num=i;tree[i].parent=0;tree[i].lchild=p1;tree[i].rchild=p2;tree[i].weight=tree[p1].weight+tree[p2].weight;}printf("\n*****************************************************\n");printf(" 哈夫曼树初始化完毕\n");printf("*****************************************************\n"); }void print1(htree t) //用于输出哈夫曼树的先序序列{cout<<'\t'<<'\t'<<t.num<<'\t'<<t.weight<<endl;if(t.lchild!=0)print1(tree[t.lchild]);if(t.rchild!=0)print1(tree[t.rchild]);}void print2(htree t) //用于输出哈夫曼树的中序序列{if(t.lchild!=0)print2(tree[t.lchild]);cout<<'\t'<<'\t'<<t.num<<'\t'<<t.weight<<endl;if(t.rchild!=0)print2(tree[t.rchild]);}void print3(htree t) //用于输出哈夫曼树的中序序列{if(t.lchild!=0)print3(tree[t.lchild]);if(t.rchild!=0)print3(tree[t.rchild]);cout<<'\t'<<'\t'<<t.num<<'\t'<<t.weight<<endl;}int high(htree t) //计算哈夫曼树的高度{int a,b;if(t.lchild==0&&t.rchild==0)return 1;a=high(tree[t.lchild])+1;b=high(tree[t.rchild])+1;if(a>b)return a;return b;}int main(){string i,j;while(1){printf("\n*****************************************************\n");printf(" 欢迎使用菜单驱动程序\n");printf("*****************************************************\n");if(flag==1){printf(" 1.初始化哈夫曼树\n"); //第一级菜单printf(" 2.清屏\n");printf(" 3.结束操作\n");printf("\n 请选择您要的操作:");cin>>i;if(i=="1"){create();flag=0;}else if(i=="2")system("cls");else if(i=="3"){printf("\n*****************************************************\n");printf(" 谢谢使用,再见\n");printf("*****************************************************\n");return 1;}else{printf("\n*****************************************************\n");printf(" 操作错误\n");printf("*****************************************************\n");}continue;}printf(" 1.重新初始化哈夫曼树\n"); //第二级菜单printf(" 2.输出哈夫曼树的高度\n");printf(" 3.输出哈夫曼树的叶子结点的个数\n");printf(" 4.输出哈夫曼树\n");printf(" 5.清屏\n");printf(" 0.结束操作\n");printf("\n 请选择您要的操作:");cin>>i;if(i=="1")create();else if(i=="2"){if(n==0){printf("\n*****************************************************\n");printf(" 这是一棵空树,高度为0\n");printf("*****************************************************\n");}else{printf("\n*****************************************************\n");printf(" 该树的高度为%d\n",high(tree[m]));printf("*****************************************************\n");}}else if(i=="3"){if(n==0){printf("\n*****************************************************\n");printf(" 这是一棵空树,叶子结点的个数为0\n");printf("*****************************************************\n");}else{printf("\n*****************************************************\n");printf(" 该树的叶子结点的个数为%d\n",n);printf("*****************************************************\n");}}else if(i=="4"){if(n==0){printf("\n*****************************************************\n");printf(" 这是一棵空树\n");printf("*****************************************************\n");continue;}while(1){printf("\n*****************************************************\n");printf(" 欢迎使用菜单驱动程序\n");printf("*****************************************************\n");printf(" 1.输出哈夫曼树的先序序列\n"); //第三级菜单printf(" 2.输出哈夫曼树的中序序列\n");printf(" 3.输出哈夫曼树的后序序列\n");printf(" 4.返回上层\n");printf(" 5.清屏\n");printf(" 0.结束操作\n");printf("\n 请输入您要的操作:");fflush(stdin);cin>>j;if(j=="1"){printf("\n*****************************************************\n");printf(" 哈夫曼树的先序序列如下(左为结点序号,右为为结点权值)\n");printf("*****************************************************\n");print1(tree[m]);}else if(j=="2"){printf("\n*****************************************************\n");printf(" 哈夫曼树的中序序列如下(左为结点序号,右为为结点权值)\n");printf("*****************************************************\n");print2(tree[m]);}else if(j=="3"){printf("\n*****************************************************\n");printf(" 哈夫曼树的后序序列如下(左为结点序号,右为为结点权值)\n");printf("*****************************************************\n");print3(tree[m]);}else if(j=="4")break;else if(j=="5")system("cls");else if(j=="0"){printf("\n*****************************************************\n");printf(" 谢谢使用,再见\n");printf("*****************************************************\n");return 1;}else{printf("\n*****************************************************\n");printf(" 操作错误\n");printf("*****************************************************\n");}}}else if(i=="5")system("cls");else if(i=="0"){printf("\n*****************************************************\n");printf(" 谢谢使用,再见\n");printf("*****************************************************\n");return 1;}else{printf("\n*****************************************************\n");printf(" 操作错误\n");printf("*****************************************************\n");}}}五. 调试小结(1).遇到的问题及解决方法1.输出函数中没有提示语句;2.p1,p2赋值错误;(2). 算法复杂度分析本实验纯属一般操作。
一、实验目的1. 理解哈夫曼树的概念及其在数据结构中的应用。
2. 掌握哈夫曼树的构建方法。
3. 学习哈夫曼编码的原理及其在数据压缩中的应用。
4. 提高编程能力,实现哈夫曼树和哈夫曼编码的相关功能。
二、实验原理哈夫曼树(Huffman Tree)是一种带权路径长度最短的二叉树,又称为最优二叉树。
其构建方法如下:1. 将所有待编码的字符按照其出现的频率排序,频率低的排在前面。
2. 选择两个频率最低的字符,构造一棵新的二叉树,这两个字符分别作为左右子节点。
3. 计算新二叉树的频率,将新二叉树插入到排序后的字符列表中。
4. 重复步骤2和3,直到只剩下一个节点,这个节点即为哈夫曼树的根节点。
哈夫曼编码是一种基于哈夫曼树的编码方法,其原理如下:1. 从哈夫曼树的根节点开始,向左子树走表示0,向右子树走表示1。
2. 每个叶子节点对应一个字符,记录从根节点到叶子节点的路径,即为该字符的哈夫曼编码。
三、实验内容1. 实现哈夫曼树的构建。
2. 实现哈夫曼编码和译码功能。
3. 测试实验结果。
四、实验步骤1. 创建一个字符数组,包含待编码的字符。
2. 创建一个数组,用于存储每个字符的频率。
3. 对字符和频率进行排序。
4. 构建哈夫曼树,根据排序后的字符和频率,按照哈夫曼树的构建方法,将字符和频率插入到哈夫曼树中。
5. 实现哈夫曼编码功能,遍历哈夫曼树,记录从根节点到叶子节点的路径,即为每个字符的哈夫曼编码。
6. 实现哈夫曼译码功能,根据哈夫曼编码,从根节点开始,按照0和1的路径,找到对应的叶子节点,即为解码后的字符。
7. 测试实验结果,验证哈夫曼编码和译码的正确性。
五、实验结果与分析1. 构建哈夫曼树根据实验数据,构建的哈夫曼树如下:```A/ \B C/ \ / \D E F G```其中,A、B、C、D、E、F、G分别代表待编码的字符。
2. 哈夫曼编码根据哈夫曼树,得到以下字符的哈夫曼编码:- A: 00- B: 01- C: 10- D: 11- E: 100- F: 101- G: 1103. 哈夫曼译码根据哈夫曼编码,对以下编码进行译码:- 00101110111译码结果为:BACGACG4. 实验结果分析通过实验,验证了哈夫曼树和哈夫曼编码的正确性。
实验报告1、实验目的:(1)理解哈夫曼树的含义和性质。
(2)掌握哈夫曼树的存储结构以及描述方法。
(3)掌握哈夫曼树的生成方法。
(4)掌握哈夫曼编码的一般方法,并理解其在数据通讯中的应用.2、实验内容:哈夫曼树与哈弗曼编码、译码a。
问题描述:哈夫曼问题的提出可以参考教材P。
145。
利用哈弗曼编码进行通信可以大大提高通信利用率,缩短信息传输时间,降低传输成本。
但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码.b。
算法提示:参见教材P.147—148算法6.12、6。
13的描述.3、实验要求:建立哈夫曼树,实现编码,译码。
错误!.初始化(Initialization)。
从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。
○2。
编码(Encoding).利用已建好的哈夫曼树(如不在内存,则从文件hfmTree中读入),对文件ToBeTran 中的正文进行编码,然后将结果存入文件CodeFile中。
○3.译码(Decoding ).利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件T extFile 中。
错误!.输出代码文件(Print).将文件CodeFile以紧凑格式显示在终端上,每行50个代码。
同时将此字符形式的编码文件写入文件CodePrint中。
错误!。
输出哈夫曼树(TreePrinting).将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。
测试数据:设权值c= (a,b, c, d , e, f,g,h)w=(5,29,7,8,14,23,3,11),n=8。
按照字符‘0’或‘1’确定找左孩子或右孩子,则权值对应的编码为:5:0001,29:11,7:1110,8:111114:110,23:01,3:0000,11:001。
哈夫曼树实验报告一、问题描述利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。
但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将穿来的数据进行译码,此试验即设计这样的一个简单的编/译码系统。
系统应该具有如下的几个功能。
1. 接受原始数据从终端任意读入字母,求出其各自的权重值,建立哈夫曼树,并将它存于hfmtree.dat文件中。
2. 编码利用已建好的哈夫曼树,对文件中的正文进行编码,然后将结果存入codefile.dat中。
3. 译码利用已建好的哈夫曼树将文件codefile.dat中的代码进行译码,结果存入文件textfile.dat中。
4. 打印编码规则即字符与编码的一一对应关系。
5. 打印哈夫曼树将已存在内存中的哈夫曼树以直观的方式显示在终端上。
二、数据结构设计1. 构造哈夫曼树时使用静态量表作为哈夫曼树的存储。
在构造哈夫曼树时,设计一个结构体数组HuffNode保存哈夫曼树中各节点的信息,根据二叉树的性质可知,具有n个叶子节点的哈夫曼树共有2n-1个结点,所以数组HuffNode的大小设置为2n-1,描述节点的数据类型为:typedef struct{int weight; //结点权值int parent;int lchild;int rchild;}HNodeType;2. 求哈夫曼编码时使用一位结构数组HuffCode作为哈腹满编码信息的存储。
求哈夫曼编码,实质上就是在以建立的哈夫曼树中,从叶子结点开始,沿结点的双亲链域退到根结点,每退回一步,就走过了哈夫满树的一个分支,从而得到一位哈夫曼码值,由于一个字符的哈夫曼编码是从根结点到相应叶子结点所经过的路径上各分支所组成的0、1序列,因此先得到的分支代码为所求编码的低位码,后得到的分支代码为所求编码的高位码,所以设计如下数据类型:typedef struct{int bit[26];int start;}HCodeType;3. 文件hfmtree.dat、codefile.dat、和textfile.dat。
哈夫曼树实验报告哈夫曼树实验报告引言:哈夫曼树是一种经典的数据结构,广泛应用于数据压缩、编码和解码等领域。
本次实验旨在通过构建哈夫曼树,探索其原理和应用。
一、哈夫曼树的定义和构建方法哈夫曼树是一种特殊的二叉树,其叶子节点对应于待编码的字符,而非叶子节点则是字符的编码。
构建哈夫曼树的方法是通过贪心算法,即每次选择权值最小的两个节点合并,直到构建出完整的哈夫曼树。
二、哈夫曼编码的原理和实现哈夫曼编码是一种可变长度编码,即不同字符的编码长度不同。
其原理是通过构建哈夫曼树来确定字符的编码,使得频率较高的字符编码较短,频率较低的字符编码较长。
这样可以有效地减少编码的长度,从而实现数据的压缩。
三、实验过程和结果在本次实验中,我们选择了一段文本作为输入数据,通过统计每个字符的频率,构建了对应的哈夫曼树。
然后,根据哈夫曼树生成了字符的编码表,并将原始数据进行了编码。
最后,我们通过对编码后的数据进行解码,验证了哈夫曼编码的正确性。
实验结果显示,通过哈夫曼编码后,原始数据的长度明显减少,达到了较好的压缩效果。
同时,解码后的数据与原始数据完全一致,证明了哈夫曼编码的可靠性和正确性。
四、哈夫曼树的应用哈夫曼树在实际应用中有着广泛的用途。
其中,最典型的应用之一是数据压缩。
通过使用哈夫曼编码,可以将大量的数据压缩为较小的存储空间,从而节省了存储资源。
此外,哈夫曼树还被广泛应用于网络传输、图像处理等领域,提高了数据传输的效率和图像的质量。
五、对哈夫曼树的思考哈夫曼树作为一种经典的数据结构,其优势在于有效地减少了数据的冗余和存储空间的占用。
然而,随着技术的不断发展,现代的数据压缩算法已经不再局限于哈夫曼编码,而是采用了更为复杂和高效的算法。
因此,我们需要在实际应用中综合考虑各种因素,选择合适的压缩算法。
六、总结通过本次实验,我们深入了解了哈夫曼树的原理和应用。
哈夫曼编码作为一种重要的数据压缩算法,具有广泛的应用前景。
在实际应用中,我们需要根据具体情况选择合适的压缩算法,以达到最佳的压缩效果和性能。
哈夫曼树实验报告一、需求分析(1)输入输出形式输入数组的组数n: 整形变量组数(回车)请依次输入n组权值与字符, 中间用空格隔开。
如“2 a”:按右提示格式输入(回车)请输入待编译文本: 随机输入字符(回车)输出: 编译出的代码请输入待编译代码: 随机输入一串代码(回车)(2)输出: 编译出的代码(3)程序功能1. 用C语言实现二叉树的说明2. 输入n个权值, 并生成n个二叉树3. 对n个二叉树逐步生成Huffman树4. 对Huffman树的每个叶子结点生成编码5.用哈夫曼树编码。
6.解码哈夫曼编码。
(4)测试用例设计Example1: 输入325 a15 b60 cabbacc010*******输出010*******abbaccExample2: 输入510 a20 b30 c20 d10 eababcde10000100001101101输出10000100001101101ababcde二、概要设计1.根据给定的n个权值(w1, w2, …, wn)构成n棵二叉树的集合F={T1, T2, …, Tn}, 其中每棵二叉树Ti中只有一个带树为Ti的根结点在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树, 且置其根结点的权值为其左右子树权值之和3.在F中删除这两棵树, 同时将新得到的二叉树加入F中4.重复2, 3, 直到F只含一棵树为止三、 5.将给定的字符串通过程序编码成哈夫曼编码, 并打印结果在屏幕上。
四、 6.翻译给定的哈夫曼编码变成可读字符串, 并将结果打印在屏幕上。
五、详细设计四、调试分析(1)编译代码、运行代码所遇到的问题及其解决办法问题1: 编译代码过程中有遇到循环体的循环次数不对, 导致二叉树生成得不对解决办法:通过小数字的演算, 检验循环, 再进行更改(2)算法的时空分析(3)心得体会五、用户使用说明如上图所示, 依次输入组数、权值及全值所对应字符。
再根据用户自身需求输入需编译的文本及代码。
哈夫曼树构造过程哈夫曼树是一种用于数据压缩和编码的树状数据结构。
它的构造过程可以分为以下几个步骤。
1. 统计字符频率在构造哈夫曼树之前,需要先统计待编码的字符在文本中出现的频率。
这可以通过遍历文本并记录每个字符出现的次数来实现。
2. 构建叶子节点根据统计得到的字符频率,可以将每个字符作为一个叶子节点,并将其频率作为节点权值。
这样就可以得到一组初始的叶子节点。
3. 构建哈夫曼树从初始的叶子节点开始,不断合并权值最小的两个节点,直到只剩下一个节点。
合并的过程是将两个节点作为子节点创建一个新的父节点,并将父节点的权值设为两个子节点权值之和。
这个过程可以使用优先队列来实现,保证每次合并的都是权值最小的两个节点。
4. 生成哈夫曼编码通过遍历哈夫曼树的路径,可以得到每个字符对应的哈夫曼编码。
具体来说,从根节点开始,向左走表示编码0,向右走表示编码1,直到到达叶子节点。
这样,每个字符都可以用一串二进制数表示,且保证不会有编码重复的情况出现。
5. 压缩数据利用生成的哈夫曼编码,可以将原始数据进行压缩。
将每个字符替换为对应的哈夫曼编码,然后将所有的二进制数连接起来,就得到了压缩后的数据。
由于哈夫曼编码是前缀码,所以可以通过编码的分割符来解码,而不会出现歧义。
6. 解码数据解码过程与压缩过程相反。
根据哈夫曼树和压缩后的数据,可以逐个读取二进制位,并根据读取的位数沿着哈夫曼树往下走。
当到达叶子节点时,就可以确定解码出的字符,并将其输出。
重复这个过程,直到解码完所有的数据。
哈夫曼树的构造过程非常灵活和高效。
通过合并权值最小的节点,可以保证树的结构不会过深,从而实现了对数据的高效压缩。
而生成的哈夫曼编码也具有唯一性和无歧义性,可以准确地还原原始数据。
总结起来,哈夫曼树的构造过程包括统计字符频率、构建叶子节点、合并节点构建树、生成哈夫曼编码、压缩数据和解码数据等步骤。
通过这个过程,可以实现对数据的高效压缩和解压缩。
哈夫曼树在数据传输和存储中有着广泛的应用,是一种非常重要的数据结构。
四、综合设计(课程设计)摘要:在这次课程设计中,所进行的实验是:哈夫曼编码和编译器。
对哈夫曼树进行建立,由节点的权值建立最小二叉树,哈夫曼树haftree,并由所建立的哈夫曼树进行编码,求出各个节点的编码。
在由所求的哈夫曼树,输入一段二进制电文,能够输出那所建立的哈夫曼树中的节点。
建立的haftree用图形化表示出来。
在整个代码实现中,窗体的实现,功能的完善,哈夫曼树的建立,哈夫曼树的编码,遇到了许多难题,haftree对象数组的分配空间,节点的属性等都比较困难。
在整个过程中,用的是C#语言,包的应用,字符串数组的空间分配,在计算每个字符的权值时,用的是sizeOf()检索整个字符串,计算字符的权值,建立字符出现频度的表格,根据表格中每个字符频度建立起哈夫曼树。
从根节点出发检索每个节点的左右孩子,如果是左孩子遍历左边,路径为0,然后左孩子为根节点;如果是右孩子,遍历右孩子,路径为1,然后右孩子为根节点。
在重新上述方法,直到所有的节点都遍历完,每个节点的编码就确定后输出来。
在译码过程中,由所输入的二进制电文,根据所建立的哈夫曼树,如果是0走左边,如果是1,走右边,直到节点的左右孩子为空时,输出给节点的信息,在回到根节点重新遍历后面的二进制电文,直到所有电文都遍历完为止,输出所有从电文中译码出来的信息。
关键词:编译器;频度;译码五、综合设计(课程设计)Abstract:In this design, the experiment was : Huffman coding and compiler. The Huffman tree to establish, by the node weights to establish a minimum of two fork tree, Huffman tree haftree, and by the Huffman tree coding, and every node coding. By the Huffman tree, enter a binary message, can output the set up by the Huffman tree nodes. Establishment of haftree graphical representation. In the implementation of the code, the realization form, function perfect, Huffman tree is established, Huffman coding tree, encountered a lot of problems, an array of haftree objects allocated space, node attributes are difficult. Throughout the process, using the C# language, the application package, an array of strings in the spatial distribution, calculated for each weight of characters, using sizeOf to retrieve the entire string, calculating the weight of characters, establish character appearance frequency of form, form the basis of each character frequency established Huffman tree. Starting from the root node to retrieve each node around children, if children left traverse left, path 0, then left the child as the root node; if it is right child, traversing the right path for children, 1 children for the root node, then the right. In the new method described above, until all of the node traversal finished, each node is determined after the output coding.In the decoding process, by the input binary message, according to the established Huffman tree, if it is 0 the left, if it is 1, go right, until the left and right child node is empty, the output to the node information, in the back of the root node to traverse behind a binary message, until all message traversal finished so far, the output from all the message decoding of information.Keywords:compiler;frequency;decoding目录摘要 ................................................................................. 错误!未定义书签。