网站大量收购独家精品文档,联系QQ:2885784924

[工学]DSB第5章.ppt

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

层次结构的数据在现实自然界中大量存在。 国家、省、市、县和区。 书的章节、回目。 上级和下级。 整体和部分。 祖先和后裔。 操作系统的目录结构 2. 树的递归定义 定义5.2 树是包括n个结点的有限非空集合T,其中一个特定的结点r称为根,其余结点(T-{r})划分成m(m≥0)个互不相交的子集T1,T2,...Tm,其中,每个子集都是树,被称为树根r的子树。 定义5.2是递归的,用子树来定义树,也就是说,在树的定义中引用了树概念本身,所以,树被称为递归数据结构。 二叉树是非常重要的树形数据结构。 很多从实际问题中抽象出来的数据是二叉树形的;以后我们将看到任意树或森林可方便地转换成二叉树,从而为一般树和森林的存储和处理提供了有效方法。 先看一个二叉树应用例子。 设有序表为(21,25,28,33,36,45),现在要在表中查找元素33。 定义5.6 扩充二叉树也称2-树,其中除叶子结点外,其余结点都必须有两个孩子。 二叉树的二叉链表结构有利于从双亲到孩子方向的访问。如果已知二叉树的一个结点,要查找其双亲结点,在该结构下只能采取从根开始,遍历整个二叉树来实现,这显然是费时的。 如果应用程序需要经常执行从孩子到双亲访问,可在二叉链表结点中增加一个parent域,令它指向该结点的双亲结点。这就实现了从孩子到双亲,以及从双亲到孩子的双向链接结构,形成多重链表。 本小节中,我们主要实现MakeTree、BreakTree和Root运算,而将二叉树遍历算法留待下一小节专门讨论。 Clear()函数释放二叉链表中的所有结点,它需要通过遍历二叉树来实现。 先序遍历序列: A B D G H E C F 中序遍历 后序遍历 层次遍历 对于遍历运算,设计了一个面向用户的公有成员函数和一个具体实现遍历操作的递归私有成员函数,两者共同完成遍历运算的功能。 公有成员函数:非递归函数,作为与用户的接 口。它调用私有的递归函数。 私有成员函数:递归函数,具体实现遍历操作。 被公有成员函数调用。 例 已知结点的前序序列和中序序列分别为: 前序序列 A B C D E F G 中序序列 C B E D A F G 则可按上述分解求得整棵二叉树。其构造过程如下图所示。首先由前序序列得知二叉树的根为A,则其左子树的中序序列为(CBED),又右子树的中序序列为(FG)。反过来得知其左子树的前序序列必为(BCDE),右子树的前序序列为(FG)。类似地,可由左子树的前序序列和中序序列构造A的左子树,由右子树的前序序列和中序序列构造得A的右子树。 编译原理中的表达式树 5.5.2 树和森林的存储表示 5.5.3 树和森林的遍历 5.6 堆和优先权队列 在很多应用中需要一种数据结构存储元素,元素加到数据结构中的次序是无关紧要的。但要求每次从数据结构中取出的元素是具有最高优先级的元素,这样的数据结构称为优先权队列。 显然优先权队列中的每个元素都应有一个优先权,优先权是可以比较高低(大小)的。优先权队列不同于FIFO先进先出队列,优先权队列按元素优先权的高低,而不是按元素进入队列的次序确定出队列的次序。 先进先出队列是一种特殊的优先权队列,元素的优先权由其进入队列的时间确定,时间越长优先级越高。 实现优先权队列可以有多种方法。 一种最简单的做法是用线性表表示优先权队列。 这时,入队列运算的做法是: 将元素插在表的最前面(或尾部)。相应的出队列运算的做法是:从队列中查找具有最高优先级的元素,并删除之。 这种实现方法需要在线性表中查找元素,查找线性表的时间复杂度为O(n)。 堆是一种很有用的数据结构,它可以高效地实现优先权队列。 另外,在内排序一章中,我们将看到,堆还可用于实现时间复杂度为O(nlog2n)的堆排序算法。 5.6.1 堆 1. 堆的定义 一个大小为n的堆是一棵包含n个结点的完全二叉树。 堆顶 最小堆 最大堆 3. 向下调整和建堆运算 5.6.2 优先权队列 1. 函数AdjustUp 依次删除元素2、28后,队列中剩余元素的排列 依次删除元素2、28后,队列中剩余元素的排列 5.7.1 树的路径长度 1. 树(Tree)转换为二叉树(BTree)算法 树可以唯一地表示成一棵二叉树: ⑴ 将树中的兄弟用线连接; ⑵ 对各结点,保留最左孩子的连线,去掉其余孩子的连线; ⑶ 调整为习惯的二叉树形(水平右斜,垂直左斜)。 A B C K D E F G H J A B C K D E H F J G (a)森林F=(T1,T2) (b) F所对应的二叉树 5.5.1 森林与二叉树的转换 D E F G H J A B C K D E F G H J A

文档评论(0)

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

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

1亿VIP精品文档

相关文档