第6章树和二叉树概论.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
6 树的定义和基本术语 1. 树的定义:由一个或多个结点组成的有限集合。仅有一个根结点,结点间有明显的层次结构关系。 6.2 二叉树 (Binary Tree) 1 、二叉树的定义及其性质 (1) 二叉树的定义   1.从概念上讲,树,森林和二叉树是三种不同的数据结构,将树,森林转化为二叉树的基本目的是什么,并指出树和二叉树的主要区别。【5分】   树的孩子兄弟链表表示法和二叉树二叉链表表示法,本质是一样的,只是解释不同,也就是说树(树是森林的特例,即森林中只有一棵树的特殊情况)可用二叉树唯一表示,并可使用二叉树的一些算法去解决树和森林中的问题。   树和二叉树的区别有二:一是二叉树的度至多为2,树无此限制;二是二叉树有左右子树之分,即使在只有一个分枝的情况下, 也必须指出是左子树还是右子树,树无此限制,当只有一个孩子时,不知为左/右孩子。   2.树和二叉树之间有什么样的区别与联系?【4分】   树和二叉树逻辑上都是树形结构,区别有以上题1所述三点。二叉树不是树的特例。 3.请分析线性表、树、广义表的主要结构特点,以及相互的差异与关联。【10】   线性表属于约束最强的线性结构,在非空线性表中,只有一个“第一个”元素,也只有一个“最后一个”元素;除第一个元素外,每个元素有唯一前驱;除最后一个元素外,每个元素有唯一后继。树是一种层次结构,有且只有一个根结点,每个结点可以有多个子女,但只有一个双亲(根无双亲),从这个意义上说存在一(双亲)对多(子女)的关系。广义表中的元素既可以是原子,也可以是子表,子表可以为它表共享。从表中套表意义上说,广义表也是层次结构。从逻辑上讲,树和广义表均属非线性结构。但在以下意义上,又蜕变为线性结构。如度为1的树,以及广义表中的元素都是原子时。另外,广义表从元素之间的关系可看成前驱和后继,也符合线性表,但这时元素有原子,也有子表,即元素并不属于同一数据对象。 (5)树与二叉树的区别 A.树的结点个数至少为1,而二叉树的结点个数可以为0。 B.树中结点的最大度数没有限制,二叉树结点最大度数为2。 C.树的结点子树无左、右之分,二叉树的结点子树有明确的左、 右之分。 下面我们再给出两种遍历二叉树的方法: (1)对一棵二叉树中序遍历时,若我们将二叉树严格地按左子树的所有结点位于根结点的左侧,右子树的所有结点位于根右侧的形式绘制,就可以对每个结点做一条垂线,映射到下面的水平线上,由此得到的顺序就是该二叉树的中序遍历序列。 (2)任何一棵二叉树都可以将它的外部 轮廓用一条线绘制出来,我们将它称为二叉树 的包线,这条包线对于理解二叉树的遍历过程 很有用。 由此可以看出: (1)遍历操作实际上是将非线性结构线性化 的过程,其结果为线性序列,并根据采用的遍 历顺序分别称为先序序列、中序序列或后序序 列;(2)遍历操作是一个递归的过程,因此, 这三种遍历操作的算法可以用递归函数实现。 (4) 按层次遍历二叉树 实现方法为从上层到下层,每层中从左侧到右侧依次访问每个结点。下面我们将给出一棵二叉树及其按层次顺序访问其中每个结点的遍历序列。 二叉树用顺序存储结构表示时,按层遍历的算法实现 void LevelOreder(QBTree BT) { for (i=1;i=BT.n; i++) if (BT.item[i]!=’#’) Visite(BT.item[i]); } 访问过程描述如下: 访问根结点,并将该结点记录下来; 若记录的所有结点都已处理完毕,则结束 遍历操作;否则重复下列操作。 取出记录中第一个还没有访问孩子的结 点,若它有左孩子,则访问左孩子,并将记录 下来;若它有右孩子,则访问右孩子,并记录 下来。 在这个算法中,应使用一个队列结构完 成这项操作。所谓记录访问结点就是入队操 作;而取出记录的结点就是出队操作。这样一 来,我们的算法就可以描述成下列形式: (1)访问根结点,并将根结点入队; (2)当队列不空时,重复下列操作: 从队列退出一个结点; 若其有左孩子,则访问左孩子,并将其左 孩子入队; 若其有右孩子,则访问右孩子,并将其右 孩子入队; 类型定义: #define MAX_TREE_NODE_SIZE 100 typedef struct { TEntryType info; int

文档评论(0)

x5511160 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档