- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第6章 树 本章学习目标树型结构是一类重要的非线性结构,在计算机领域有着广泛的应用,如数据库系统中的信息组织等。 6.1 树的概念与表示 6.1.1 树的定义 树(Tree)是n个(n≥0)个结点组成的有限集合T,当T为空集时称为空树,否则它满足如下两个条件: (1) 有且仅有一个特定的称为根(Root)的结点。 树具有下面两个特点: (1)树的根结点没有前驱结点,除根结点之外的所有结点有且只有一个前驱结点。 (2)树中所有结点可以有零个或多个后继结点。 6.1.2 树的相关术语 结点:一个数据元素及若干个指向其子树的分支。结点的度:结点所拥有的子树的个数称为该结点的度。树的度:树中结点度的最大值。 具有同一个双亲的孩子结点互称为兄弟。祖先、子孙:从树中根结点到某一结点所经过的分支上的所有结点称为该结点的祖先。反之,以某结点为根的子树中的任一结点都称为该结点的子孙。 结点的层数:规定树的根结点的层数为1,其余结点的层数等于它的双亲结点的层数加1。树的深度:树中所有结点的最大层数称为树的深度或高度。 6.1.3 树的表示 树的表示有四种方法,直观表示法、嵌套集合表示法、凹入表示法、广义表表示法。 6.2 二叉树的概念与性质 6.2.1 二叉树的基本概念 定义:二叉树是n个(n≥0)结点的集合,该集合或者为空、或者由一个根结点和两个分别称为左子树和右子树的互不相交的二叉树组成,当集合为空时,称该二叉树为空二叉树。 二叉树具有五种基本形态:空二叉树、仅有根结点的二叉树、右子树为空的二叉树、左子树为空的二叉树和左右子树均不为空的二叉树。 6.2.2 二叉树的重要性质 二叉树有以下重要性质。 性质1 二叉树的第i(i≥1)层上最多有2 i -1个结点。 对非空二叉树,第一层为根结点,最多只有一个结点,即20个;显然第二层最多有21个;以此类推,第 i 层上最多只有2i-1个结点。 性质2 在一棵深度为k的二叉树中,最多具有2 k-1个结点。 性质2 在一棵深度为k的二叉树中,最多具有2 k-1个结点。 证明:由性质1可知,第i层的结点数最多为2 i-1(1≤i≤k),则深度为k的二叉树的结点数最多为: 证明:设度为i的结点有ni 个(其中:i=0,1,2),总结点个数为 n,总分支数为e,则根据二叉树的定义,有如下的式子: n = n0 + n1 + n2 e = 2n2 + n1 = n - 1 将两式结合有: 2n2 + n1 = n0 + n1 + n2 - 1 即有 n0 = n2 + 1 性质4 具有n个结点的完全二叉树的深度k为。 性质5 对于具有n个结点的完全二叉树,如果按照从上至下和从左到右的顺序对所有结点从1开始顺序编号,则对于任意的序号为i的结点有: (1)若i =1 则该结点为根结点i,无双亲; (2)若i>1, 则 i结点的双亲为; (3)若2i≤n, 则 i结点的左孩子为2i,否则没有左孩子。 (4)若2i+1≤n, 则i结点的右孩子为2i+1,否则没有右孩子。 (5)i结点所在层次为 6.3 二叉树的存储结构 二叉树有两种存储结构:顺序存储结构和链式存储结构。 6.3.1 顺序存储结构 二叉树的顺序存储,就是把所有结点按照一定的顺序存放到一组连续的存储单元中。一般是按照完全二叉树中结点编号将结点自上而下、自左至右的顺序存储。可以看出,数组下标和结点的编号相对应,即结点在数组中的位置隐含了结点之间的关系。 6.3.2 链式存储结构 二叉树的链式存储结构是指用链表的形式来存储二叉树,即用指针来指示元素之间的逻辑关系。最常用的有二叉链表和三叉链表。 1. 二叉链表存储 每个结点由三个域组成,一个数据域和两个指针域。两个指针lchild和rchild分别指向其左孩子和右孩子结点。 2. 三叉链表存储 每个结点由四个域组成,具体结构如图6-6所示: 二叉树T的二叉链表表示,其中bt是一个*BTNode类型的变量;三叉链表表示,其中bt_p是*BTNode_p类型的变量。 6.3.3 建立二叉树的二叉链表 建立二叉链表有多种方法,比较直观的方法是利用二叉树的性质5来创建二叉链表。 对于一棵任意的二叉树,先按满二叉树对其进行编号。这时结点的编号满足性质5的关系。算法实现时,设置一个辅助向量数组p存放指向结点的指针。如p[i] 用来存放编号为i的结点的指针。当输入一个结点s信息,即创建了该结点,同时将该结点的指针保存在向量p[i]中。当i=
文档评论(0)