- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实用数据结构基础 第6章 树 第 6 章 树 知 识 点 树的基本概念与术语 二叉树及二叉树的存储结构 二叉树的遍历及线索二叉树 一般树和二叉树的转换 哈夫曼树及哈夫曼编码 难 点 二叉树遍历算法的设计 利用二叉树遍历算法,解决简单应用问题 哈夫曼树的算法 要 求 熟练掌握以下内容: 树的基本概念和术语 二叉树定义和存储结构 二叉树遍历的概念和二叉树遍历的算法 哈夫曼树的建立 了解以下内容: 树和二叉树之间的相互转换方法 线索二叉树的概念 哈夫曼编码 第 6 章 目 录 6-1 树的定义和术语 6-2 二叉树 6-3 遍历二叉树和线索二叉树 6-4 二叉树的转换 6-5 二叉树树的应用 6-6 哈夫曼树及其应用 小 结 实验6 树子系统 习题6 6-1 树的定义和术语 6-2 二叉树 6-2-1 二叉树的定义 1.定义 二叉树是有n(n=0)个结点的有限集合。 (1)该集合或者为空(n=0); (2)或者由一个根结点及两个不相交的分别称为左子树和右子树组成的非空树; (3)左子树和右子树同样又都是二叉树。 通俗地讲:在一棵非空的二叉树中,每个结点至多只有两棵子树,分别称为左子树和右子树,且左右子树的次序不能任意交换。所以,二叉树是特殊的有序树。 6-3 遍历二叉树和线索二叉树 6-4 二叉树的转换 6-5 二叉树的应用 6-6 哈夫曼树极其应用 小 结 实验6 树子系统 习题6 6-6-3 哈夫曼编码 1.什么是哈夫编码? 在数据通讯中,经常需要将传送的文字转换成由二进制字符0,1组成的二进制代码,称之为编码。 如果在编码时考虑字符出现的频率,让出现频率高的字符采用尽可能短的编码,出现频率低的字符采用稍长的编码,构造一种不等长编码,则电文的代码就可能更短。哈夫曼编码是一种用于构造使电文的编码总长最短的编码方案。 2.求哈夫曼编码的方法 (1)构造哈夫曼树 设需要编码的字符集合为{d1,d2,…,dn},它们在电文中出现的次数集合为{w1,w2,…,wn},以d1,d2,…,dn作为叶结点,w1,w2,…,wn作为它们的权值,构造一棵哈夫曼树。 【例6-13】设有A,B,C,D,E,F 6个数据项,其出现的频度分别为6、5、4、3、2、1,构造一棵哈夫曼树,并确定它们的哈夫曼编码。 构造一棵哈夫曼树,并确定它们的哈夫曼编码。 图6-29 构造哈夫曼树到哈夫曼编码的过程 (2)在哈夫曼树上求叶结点的编码。 规定哈夫曼树中的左分支代表0,右分支代表1,则从根结点到每个叶结点所经过的路径分支组成的0和1的序列便为该结点对应字符的编码,如图6-29(b)编码为: A=11;B=01;C=00;D=100;E=1011;F=1010。 在哈夫曼编码树中,树的带权路径长度的含义是各个字符的码长与其出现次数的乘积之和,也就是电文的代码总长。采用哈夫曼树构造的编码是一种能使电文代码总长为最短的、不等长编码。 求哈夫曼编码,实质上就是在已建立的哈夫曼树中,从叶结点开始,沿结点的双亲链域回退到根结点,每回退一步,就走过了哈夫曼树的一个分支,从而得到一位哈夫曼码值,由于一个字符的哈夫曼编码是从根结点到相应叶结点所经过的路径上各分支所组成的0,1序列,因此先得到的分支代码为所求编码的低位码,后得到的分支代码为所求编码的高位码。 *3.哈夫曼树及哈夫曼编码的程序: #include stdio.h #define MAXLEN 100 typedef struct // 定义结构体 {int weight; // 定义一个整型权值变量 int lchild,rchild,parent; // 定义左、右孩子及双亲指针 }HTNode; typedef HTNode HFMT [MAXLEN]; // 是向量类型的 int n; void InitHFMT (HFMT T) // 初始化 {int i; printf (\n\t\t请输入共有多少个权值 (小于100):); scanf (%d,n);getchar(); for (i=0; i2*n-1; i++) {T[i].weight=0; T[i].lchild=-1; T[i].rchild=-1; T[i].parent=-1; } } 小 结 void InputWeight(HFMT T) // 输入权值 {int w; i
您可能关注的文档
- 2004年普通高等学校招生全国统一考试 语文(北京卷).doc
- 2004年全国普通高等学校统一招生考试 数学.doc
- (四川卷)2009年普通高等学校招生全国统一考试语文试卷解析.doc
- 1996年全国普通高等学校招生统一考试 化学.doc
- 2004年全国普通高等学校招生统一考试(江苏) 物理试题.doc
- 2005年普通高等学校招生考试 文科综合能力测试(天津卷).doc
- 1999年普通高等学校招生全国统一考试 物理试题.doc
- 2005年普通高等学校招生全国统一考试(福建卷) 数学试题.doc
- 2000年春季部分普通高等学校招生考试 化学.doc
- 2006年普通高等学校招生全国统一考试 数学(理工农医类) (北京卷).doc
文档评论(0)