山东广播电视大学开放教育数据结构复习第四部分.docVIP

山东广播电视大学开放教育数据结构复习第四部分.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
山东广播电视大学开放教育数据结构复习第四部分

山东广播电视大学 开放教育《数据结构》期末复习指导 树是一种重要的非线性结构,从逻辑角度看,其数据元素之间体现的是一对多的非线性关系,一切具有层次关系的问题都可以用树来描述。 一、相关术语 树、二叉树、树根、子树、有序树、无序数、森林、终端结点(叶子)、非终端结点、结点的度、结点的层次、树的深度、满二叉树、完全二叉树、理想二叉树、孩子、双亲、左孩子、右孩子、先序遍历、中序遍历、后序遍历、层次遍历、哈夫曼树、最优二叉树、路径、路径长度、权、带权路径长度、哈夫曼编码。 二、树的概念 树的定义 ??? 树的递归定义: ????? 树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件: (1)有且仅有一个特定的称为根(Root)的结点; (2)其余的结点可分为m(m≥0)个互不相交的子集Tl,T2,…,Tm,其中每个子集本身又是一棵树,并称其为根的子树(Subree)。        注意: ??? 树的递归定义刻画了树的固有特性:一棵非空树是由若干棵子树构成的,而子树又可由若干棵更小的子树构成。二叉树的定义二叉树是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。(1)二叉树与无序树不同 ???? 二叉树中,每个结点最多只能有两棵子树,并且有左右之分。 ?  二叉树并非是树的特殊情形,它们是两种不同的数据结构。 (2)二叉树与度数为2的有序树不同 ??? 在有序树中,虽然一个结点的孩子之间是有左右次序的,但是若该结点只有一个孩子,就无须区分其左右次序。而在二叉树中,即使是一个孩子也有左右之分。二叉树的存储结构顺序存储结构 ??? 该方法是把二叉树的所有结点按照一定的线性次序存储到一片连续的存储单元中。结点在这个序列中的相互位置还能反映出结点之间的逻辑关系。 1.完全二叉树结点编号 (1) 编号办法 ???  在一棵n个结点的完全二叉树中,从树根起,自上层到下层,每层从左至右,给所有结点编号,能得到一个反映整个二叉树结构的线性序列。   【例】如下图所示。(2) 编号特点 ???  完全二叉树中除最下面一层外,各层都充满了结点。每一层的结点个数恰好是上一层结点个数的2倍。从一个结点的编号就可推得其双亲,左、右孩子,兄弟等结点的编号。假设编号为i的结点是ki(1≤i≤n),则有:   若i1,则ki的双亲编号为;若i=1,则Ki是根结点,无双亲。   若2i≤n,则Ki的左孩子的编号是2i;否则,Ki无左孩子,即Ki必定是叶子。因此完全二叉树中编号的结点必定是叶结点。   若2i+1≤n,则Ki的右孩子的编号是2i+1;否则,Ki无右孩子。   若i为奇数且不为1,则Ki的左兄弟的编号是i-1;否则,Ki无左兄弟。   若i为偶数且小于n,则Ki的右兄弟的编号是i+1;否则,Ki无右兄弟。 2.完全二叉树的顺序存储 ??? 将完全二叉树中所有结点按编号顺序依次存储在一个向量bt[0..n]中。 ? 其中: ??? bt[1..n]用来存储结点 ??? bt[0]不用或用来存储结点数目。  【例】表是图的完全二叉树的顺序存储结构,bt[0]为结点数目,b[7]的双亲、左右孩子分别是bt[3]、bt[l4]和bt[15]。3.一般二叉树的顺序存储 (1) 具体方法    将一般二叉树添上一些 虚结点,成为完全二叉树    为了用结点在向量中的相对位置来表示结点之间的逻辑关系,按完全二叉树形式给结点编号 将结点按编号存入向量对应分量,其中虚结点用表示 【例】图中单支树的顺序存储结构如下图 (2) 优点和缺点    对完全二叉树而言,顺序存储结构既简单又节省存储空间。    一般的二叉树采用顺序存储结构时,虽然简单,但易造成存储空间的浪费。 【例】最坏的情况下,一个深度为k且只有k个结点的右单支树需要2k-1个结点的存储空。   在对顺序存储的二叉树做插入和删除结点操作时,要大量移动结点。4.二叉树的顺序存储结构类型定义 ?? 【参见】链式存储结构 ?1.结点的结构 ??? 二叉树的每个结点最多有两个孩子。用链接方式存储二叉树时,每个结点除了存储结点本身的数据外,还应设置两个指针域lchild和rchild,分别指向该结点的左孩子和右孩子。结点的结构为:2.结点的类型说明 ??? typedef char DataType; /用户可根据具体应用定义DataType的实际类型? ??? typedef struct node{ ????????? DataType data;? ????????? Struct node *lchild,*rchild; /左右孩子

文档评论(0)

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

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

1亿VIP精品文档

相关文档