- 1、本文档共224页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 树和二叉树;树是由n(n≥0)个结点组成的有限集合(记为T)。
如果n=0,它是一棵空树,这是树的特例。
如果n0,这n个结点中存在(有仅存在)一个结点作为树的根结点(root),其余结点可分为m(m≥0)个互不相交的有限集T1、T2、…、Tm,其中每个子集本身又是一棵符合本定义的树,称为根结点的子树。;树是一种非线性数据结构,具有以下特点:;ADT Tree
{
数据对象:
D={ai | 0≤i≤n-1,n≥0,ai为E类型}
数据关系:
R={r}
r={ai,aj | ai,aj∈D, 0≤i,j≤n-1,其中每个结点最多只有一个前驱
结点、可以有零个或多个后继结点,有且仅有一个结点即根
结点没有前驱结点 }
基本运算:
CreateTree():由树的逻辑结构表示建立其存储结构。
DispTree():输出树的括号表示串。
E GetParent(int i):求编号为i的结点的双亲结点值。
…
};6.1.2 树的逻辑结构表示方法;文氏图表示法。使用集合以及集合的包含关系描述树结构。;凹入表示法。使用线段的伸缩关系描述树结构。;括号表示法。将树的根结点写在括号的左边,除根结点之外的其余结点写在括号中并用逗号分隔。;列表表示法。 “[根结点,子树1,子树2,…,子树m]”。;6.1.3 树的基本术语;树的度。树中所有结点的度的最大值称之为树的度。;分支结点。度大于0的结点称为分支结点或非终端结点。度为1的结点称为单分支结点,度为2的结点称为双分支结点,依次类推。;叶子结点(或叶结点)。度为零的结点称为叶子结点或终端结点。;孩子结点。一个结点的后继称之为该结点的孩子结点。;双亲结点(或父亲结点)。一个结点称为其后继结点的双亲结点。;子孙结点。一个结点的子树中除该结点外的所有结点称之为该结点的子孙结点。;祖先结点。从树根结点到达某个结点的路径上通过的所有结点称为该结点的祖先结点(不含该结点自身)。;兄弟结点。具有同一双亲的结点互相称之为兄弟结点。;结点层次。树具有一种层次结构,根结点为第一层,其孩子结点为第二层,如此类推得到每个结点的层次。;树的高度。树中结点的最大层次称为树的高度或深度。;森林。零棵或多棵互不相交的树的集合???为森林。;6.1.4 树的性质;性质2:度为m的树中第i层上至多有mi-1个结点,这里应有i≥1。;性质3: 高度为h的m次树至多有 个结点。;性质4:具有n个结点的m次树的最小高度为?logm(n(m-1)+1)?。;根据树的性质3可得:; 【例6.1】 若一棵三次树中度为3的结点为2个,度为2的结点为1个,度为1的结点为2个,则该三次树中总的结点个数和度为0的结点个数分别是多少?;6.1.5 树的基本运算; 树的遍历运算是指按某种方式访问树中的每一个结点且每一个结点只被访问一次。
有以下3种遍历方法:;先根遍历:;;6.1.6 树的存储结构;双亲存储结构; 【例6.2】若一棵树采用双亲存储结构t存储,设计一个算法求指定索引是i的结点的层次。;2. 孩子链存储结构;优点是查找某结点的孩子结点十分方便。
缺点是查找某结点的双亲结点比较费时。;【例6.3】若一棵树采用孩子链存储结构t存储,设计一个算法求其高度。;3. 长子兄弟链存储结构;优点是查找某结点的孩子结点十分方便。
缺点是查找某结点的双亲结点比较费时。;【例6.4】若一棵树采用长子兄弟链存储结构t存储,设计一个算法求其高度。;4. 列表存储结构;【例6.5】若一棵树采用列表存储结构t存储,设计一个算法求其高度。;二叉树也称为二分树,它是有限的结点集合,这个集合或者是空,或者由一个根结点和两棵互不相交的称为左子树和右子树的二叉树组成。
二叉树中许多概念与树中的概念相同。
在含n个结点的二叉树中,所有结点的度小于等于2,通常用n0表示叶子结点个数,n1表示单分支结点个11数,n2表示双分支结点个数。;度为2的树至少有3个结点,而二叉树的结点数可以为0。
度为2的树不区分子树的次序,而二叉树中的每个结点最多有两个孩子结点,且必须要区分左右子树,即使在结点只有一棵子树的情况下也要明确指出该子树是左子树还是右子树。;归纳起来,二叉树的5种形态:;ADT BTree
{
数据对象:
D={ai | 0≤i≤n-1,n≥0} //为了简单,除了特别说明外假设结点值为char
数据关系:
R={r}
r={ai,aj | ai,aj∈D, 0≤i,j≤n-1,当n=0时,称为空二叉树;否则其中
有一个根结点,其他结点构成根结点的互不相交的左、右子树,该
左、右两棵子树也是二叉
文档评论(0)