- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第 7 章 内容提纲 7.1 仿真指针 7.2 树 7.3 二叉树 7.4 链式存储结构的二叉树设计 7.5 二叉树遍历游标类 7.6 线索二叉树 7.7 堆 7.8 哈夫曼树 第一部分 7.1仿真指针 第二部分 树 7.2.1 树的定义 树tree的递归定义: 树(tree)是n个数据元素的有限集(记为T),对任意一棵树T有: 存在唯一一个称为根(root) 的数据元素; 当n>1时,其它数据元素可分为m(m>0) 个互不相交的有限集T1,T2,…,Tm,其中每个集合Ti(i=1,2,…,m)本身又是一棵树,并称树 Ti是根的子树(subtree). 树的结点(Node) 结点的度、树的度 结点的层次、树的深度 树的深度为4 序树、森林 无序树:树中任意一个结点的各个子树之间的次序构成无关紧要,交换树中任意一个结点的各个子树的次序均和原树相同的树构成无序树。 有序树:树中任意一个结点的任意子树都是有次序的树。 森林:m颗树的集合称为森林。 7.2.2 树的表示方法 树的直观表示法 树的形式化表示法 树的形式化表示法主要用于树理论描述。 T = (D,R) T为树,D表示树的结点、R为结点之间的关系的集合 为空树时:D = ? 非空时:D = {Root} ? F (Root:根结点、F森林) F = T1 ? T2 ? T3 … ? Tm (Ti:子树) R = {Root,Rooti,I = 1,2,3…m} (Root:根结点、 Rooti :i子树的根结点, Root,Rooti 表示了父子关系) 树的凹入表示法 A)常规表示 树的集合表示 A)常规表示 7.2.3 树的基本操作 树是非线性结构,结点之间的关系较线性结构复杂。 数据成员:根节点指针,当前节点指针 第一类操作: 寻找根结点使之成为当前结点; 寻找当前结点的双亲结点使之成为当前结点; 寻找当前结点的孩子结点使之成为当前结点; 寻找当前结点的下一个兄弟结点使之成为当前结点。 树的基本操作 第二类操作: 在树的当前结点上插入一个新结点,使新插入的结点成为当前结点的第i个孩子结点; 删除树的当前结点的第i个孩子结点; 在树的当前结点上插入一个新子树,使新子树成为当前结点的第I棵子树; 删除树的当前结点的第I棵子树。 树的基本操作 第三类操作: 按某种方式遍历一棵树显示树中每个结点的数据域值; 按某种方式遍历一棵树寻找数据元素域为某一值的结点。 树的遍历操作指按某种方式访问树中每一个结点,且每一个结点只被访问一次 遍历方式分为: 先根遍历 后根遍历 树的遍历 先根遍历: 访问根结点 按照从左到右次序先根遍历根结点的每一棵子树 树的遍历 后根遍历: 按照从左到右次序后根遍历根结点的每一棵子树 访问根结点 7.2.4 树的存储结构 计算机中树的存储既要求存储数据,又要求存储关系,但关系复杂 常见几种存储结构 双亲表示法 孩子表示法 双亲孩子表示法 孩子兄弟表示法 双亲表示法 双亲表示法每个结点有两个域: data:数据元素域 parent:指示其双亲结点的指针域 孩子表示法 孩子表示法每个子树个数(即结点的度)不同,每个结点的孩子结点指针域不同,为了方便,定义结点孩子指针域个数为树的度: data:数据元素域 children[]:指示其孩子结点的指针域 双亲孩子表示法 双亲孩子表示把双亲表示法和孩子表示法结合起来的兼具两种存储结构的优点。 孩子兄弟表示法 孩子兄弟表示为每个结点设计三个域: data:数据元素域 firstChild:该结点的第一个孩子指针 nextSibling:该结点的下一个兄弟指针 7.2.5 树类的抽象 树抽象用得最多的一种表示法:孩子兄弟表示法,抽象过程分为两步 结点的抽象 树的抽象 树类-结点定义 树类实现-第二类操作 树类实现-第二类操作 树类实现-第三类操作 树类实现-第三类操作 树类实现-第三类操作 第二部分 7.3.1 二叉树的定义 每个结点至多有两棵子树,1度或2度 每个结点分左子树(左孩子 )、右子树(右孩子) 二叉树的5种形态 特殊二叉树 满二叉树:所有分支结点都存在左子树和右子树,且叶子结点在同一层,称满二叉树。深度为k,结点数2k-1,每层结点数都最大 完全二叉树:满二叉树去掉最下层最右边若干结点 满二叉树也是完全二叉树 7.3.2 二叉树的性质 性质1 若规定根结点的层次是0,则一颗非空二叉树第i层上的结点数目最多为2i(i≥0)。 二叉树的性质 性质2 若规定空树的深度为-1,深度为k的二叉树至多有2k+1-1个结点(k≥-1)。 二叉树的性质 性质3 在任意-棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则no=n2+1。证明:因为二叉树中所有
文档评论(0)