DSB第5章-新.ppt

  1. 1、本文档共93页,可阅读全部内容。
  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.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 B C K G A C K G A == C K == 再看一例 注意: ⑴ 左孩子右兄弟。(树→二叉树) 二叉树中有两个结点X和Y,且X是Y的双亲 ⑵ 树的根结点没有兄弟,所以树对应的二叉树根结点没有右子树 Y是X兄弟 Y是X右孩子 Y是X孩子 Y是X左孩子 树中 二叉树中 2. 森林(Forest)转换成二叉树(BTree) 可以将任何森林唯一地表示成一棵二叉树。 方法如下: (1)若F为空,则B为空二叉树 (2)若F非空,则B的根是F中第一棵子树T1的根R1,B的左子树是R1的子树森林(T11,T12,…,T1m),B的右子树是森林(T2,…,Tn)所对应的二叉树 最后所形成的二叉树就是森林所对应的二叉树。 A B C K D E F G H J A B C K D E H F J G ① A D E H F J G B C K ② 3. 二叉树转换成森林(B→F) 左孩子右兄弟 A B C K D E F G H J A D E H F J G B C K 一棵二叉树B转换成的森林中有多少棵树? 一棵二叉树转化成的森林中所具有的树的数目,等于二叉树从根结点开始沿右链到第一个没有右孩子的结点所经过的结点数目。 A B E C D F G H I J 经过3个结点,故森林中3棵树 A B C D E F G H I J A B

文档评论(0)

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

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

1亿VIP精品文档

相关文档