第六章 树和二叉树g.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
树形图表示的例子 有一n 个结点的完全二叉树 1. ? 求n0 和最后一个非终端结点的编号. 2. ? n为奇数或偶数时n1,n2 3. ? 不用对数如何求树的深度.任一结点层次 4. ? 哪种形态树的层次最小或最大 ? MAX_TREE_SIZE 如何确定(数组 长度) ? 每一层的结点编号如何求,范围 如何确定 ? n 个结点的二叉树哪种形态最好 (存储密度最大), 哪种形态最坏 (存储密度最小). 二、按层次遍历二叉树 实现方法:从上层到下层,每层中从左侧到右侧依次访问每个结点。下面我们将给出一棵二叉树及其按层次顺序访问其中每个结点的遍历序列。 二叉树的顺序存储表示时的层次遍历实现 上例的物理结构逻辑图为: 二叉树的链式存储表示时的层次遍历实现 上例的物理结构逻辑图为: 注意: 教材中的递归算法(算法6.1)与 本课件算法略有区别,请注意以下几 点: 1. 函数类型(void 和int) 2. if (PreOrderTraverse(T-Lchild,Visit)) 断点在扩弧内 3. 结果完全相同 有关树的遍历算法的几个问题: 1. 有关二叉树的很多操作(如查找某个结点等)都可以将遍历算 法作为核心算法,只需修改Visit函数. 2.遍历算法的原操作为访问结点,因此遍历n个结点的二叉树,其时间复杂度为O(n) 3. 所需辅助空间为栈的最大容量,即为树的深度,最好情况为完全二叉树? log2n? +1,而最坏情况为单支树 n ,因此时间复杂度为O(n). 4. 遍历结果都是线性序列 有关树的计数问题: 1. 例: 已知结点的二遍历序列 前序序列: A B C D E F G 中序序列: C B E D A F G 画出二叉树 2. ?已知中序和后序序列,画出二叉树 四.中序非递归遍历算法(栈的应用) 中序遍历示意图 线索二叉树 何谓线索二叉树? 线索链表的遍历算法 如何建立线索链表? 线索链表的结点结构 ltag和rtag是增加的两个标志域,用来区分结点的左、右指针域是指向其左、右孩子的指针,还是指向其前驱或后继的线索。???? ABCDEFGHI 6.6 哈 夫 曼 树 与 哈 夫 曼 编 码 最优树(哈夫曼树)的定义 如何构造最优树 前缀编码 哈夫曼编码 注意: ?? ① 初始森林中的n棵二叉树,每棵树有一个孤立的结点,它们既是根,又是叶子 ???② n个叶子的哈夫曼树要经过n-1次合并,产生n-1个新结点。最终求得的哈夫曼树中共有2n-1个结点。 ???③ 哈夫曼树是严格的二叉树,没有度数为1的分支结点。 三. 前缀编码 在电文传输中,需要将电文中出现的每个字符进行二进制编码。在设计编码时需要遵守两个原则: (1)发送方传输的二进制编码,到接收方解码后必须具有唯一性,即解码结果与发送方发送的电文完全一样; (2)发送的二进制编码尽可能地短。下面我们介绍两种编码的方式。 哈夫曼编码的构造方法 : (1)利用字符集中每个字符的使用 频率作为权值构造一个哈夫曼树; (2)从根结点开始,为到每个叶子 结点路径上的左分支赋予0,右分支 赋予1,并从根到叶子方向形成该叶子 结点的编码。 例如: 假设有一个电文字符集中有8个字符,每个字符 的使用频率分别为{0.05,0.29,0.07,0.08,0.14,0.23, 0.03,0.11},现以此为例设计哈夫曼编码。 为方便计算,将所有字符的频度乘以100,使 其转换成整型数值集合,得到{5,29,7,8,14,23, 3,11}; 哈夫曼编码设计如下图: 哈夫曼树的存储结构 用一个大小为2n-1的向量来存储哈夫曼树中 的结点,其存储结构为: ? typedef struct { //结点类型 ????? int weight; //权值,不妨设权值均大于零 ????? int lchild,rchild,parent; //左右孩子及双亲指针 ??? }HTNode,*HuffmanTree; Typedef char **Huffmancode; //从叶子到根逆向求每个字符的赫夫曼编码 ?? HC=(Huffmanco

文档评论(0)

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

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

1亿VIP精品文档

相关文档