两种存储结构比较线性表.PPT

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
两种存储结构比较线性表

3、中序遍历二叉树递归算法 void inorder ( bitree *t ) {if (t==NULL) return; else { inorder( t-lch ); visit ( t ); inorder( t-rch ); } } 递归算法中栈的变化过程示例 4、中序遍历二叉树的非递归算法 void inorder(bitree *root) { bitree *p; 定义及初始化栈; p=root; while(p!=NULL || 栈不空) if (p!=NULL) {p进栈;p=p-lch;} else {栈顶给p并出栈;输出p;p=p-rch;} } 上机: 1、用先序递归方法建立一棵二叉树; 2、用中序非递归方法遍历该二叉树。 §5.5 二叉树的应用(哈夫曼树) 一、基本概念 路 径: 一结点到另一结点途经的所有分支 路径长度: 途经分支数目 树的路径长度(pl): 树根到所有结点路径长度之和 例子: 基本概念(续): 结点的带权路径长度: 权与结点到根结点的路径长度之积; 树的带权路径长度(WPL): 树中所有 叶子结点 WPL之和. 例子 二、哈夫曼树 1、定义:n个带权叶子结点构成的所有二叉树中,wpl最小的即为哈夫曼树,也称最优二叉树。 例子 问题:哈夫曼树是否唯一? 2、构造哈夫曼树 要求:左子树权≤右子树权 方法:每次找两个最小的合并,直到只有一个根结点。 (为什么?) 例子:8,16,4,6,7 练习: 已知有6个叶子,值分别为A、B、C、D、E、F,它们的权值分别为4,9,1,3,2,1,试构造哈夫曼树(左权≤右权)。 要求:编码尽量短, 且一字符编码非另 一编码前缀。 3、哈夫曼树的应用 (哈夫曼编码) 如用叶子结点表示各个字符,则根结点到各个叶子结点的路径各不相同,为分支编码,左分支为0,右分支为1,则路径编码为字符编码。 满足:① 编码各不相同; ② 根结点到任一叶子绝不会经过另一叶子,所以绝不会是另一字符编码前缀; ③ 采用haffman编码时,编码能尽量短。 3、哈夫曼树的应用2 (哈夫曼编码) 题目:报文中A,B,C,D,E,F出现的频率为0.20,0.45,0.05,0.15,0.10,0.05,试为每个字符编码。 解:可设对应权为(4,9,1,3,2,1),先构造哈夫曼树,再编码。 (1)编码的形成 设有7个带权结点A,B,C,D,E,F,G,其权值分别为3,7,8,2,5,8,4,试以这7带权结点为叶子结点,构造一棵哈夫曼树(左权≤右权)。 练习: 在一份报文中有五种字符,A,B,C,D,E,它们在报文中出现的频率比例为4,7,5,2,9,试通过构造最优二叉树来确定每种字符的哈夫曼编码(左权≤右权)。 练习: (2)编码的算法思想 问题1:若哈夫曼树有n0个叶子结点,则所有结点 个。 2n0-1 解:因为树中无度为1的结点, 由二叉树的性质3知:n0=n2+1 所以:n=n0+n2=n0+n0-1 =2n0-1 (2)编码的算法思想2 问题2:结点元素结构如何构造? value weight parent lch rch 权 (2)编码的算法思想3 问题3:算法如何构造哈夫曼树? (数组实现) 找两无双亲且权值最小结点合并,生成新结点,填写相关信息(两结点双亲,新结点权值,新结点左、右孩子)。 (2)编码的算法思想4 问题4:如何编码? 从叶子结点到根结点顺着路径分支为其编码。 上 机 理解建立huffman树的过程及编码过程。 1. 结点定义(需要至少4个域:weight,parent,lch,rch) 2. 定义数组 3. 输入叶子的个数n 4. 数组初始化 5. 输入叶子的权值 6. 循环n-1次做: (1)找

文档评论(0)

2105194781 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档