数据结构C版A-6详解.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
前面我们学习的线性数据结构,每个元素都有唯一的前驱(第一个除外)和后继(最后一个除外),但是在现实应用中,一些问题的数据元素之间的关系就不这样简单,例如元素有多个前驱、多个后继。 本章学习一种非线性数据结构一树,数据元素之间是一种层次关系,元素有且只有一个前驱,但可以有多个后继。 树的概念和基本术语 二叉树 二叉树遍历 线索二叉树 树与森林 霍夫曼树 树的高度:树中结点的最大层次. 结点的度:结点子树的个数 树的度: 树内各结点的度的最大值。 叶子结点:也叫终端结点,是度为0的结点; 分枝结点:度不为0的结点; 有序树:子树有序的树,(子树不能互换)如:家族树; 无序树:不考虑子树的顺序; 路径:树中的k 个结点n1,n2,… ,nk,满足ni 是ni + 1 的双亲,n1到nk有一条路径 路径长度:分支数=路径上结点个数一1 对比树型结构和线性结构的结构特点 树的常见表示方法 1.直观表示法:用圆圈表示结点,元素写在圆圈中,连线表示元素之间的关系.根在上,叶子在下(即树向下生长) 2 、集合表示法: 根据树的集合定义,写出集合划分。 3 、文氏图表示法: 集合表示的一种直观表示,用图表示集合。 4 、目录表示法: 将一棵树描述为一本书,书--章--节--小节 5 、广义表表示法: 将一棵树描述为一个广义表,子树就对应子表。 树的基本操作 InitTree(&T); 操作结果:构造空树T。 DestroyTree(&T); 初始条件:树T存在。 操作结果:销毁树T。 CreateTree(&T,definition) 初始条件:definition给出树T的定义。 操作结果:按definition构造树T。 ClearTree(&T); 初始条件:树T存在。 操作结果:将树T清为空树。 TreeEmpty(T) 初始条件:树T存在。 操作结果:若T为空树,则返回ture,否则false。 TreeDepth(T) 初始条件:树T存在。 操作结果:返回T的深度。 Root(T) 初始条件:树T存在。 操作结果:返回T的根。 Value(T, Cur_e) 初始条件:树T存在,cur_e是T中某 个结点。 操作结果:返回cur_e的值。 Assign(T,cur_e,value) 初始条件:树T存在,cur_e是T中某个结点。 操作结果:结点cur_e赋值 为value。 Parent(T,cur_e) 初始条件:树T存在,cur_e是T中某个结点。 操作结果:若cur_e是T的非根结点,则返回它的双亲,否则函数值为“空”。 Rightsibling(T,cur_e) 初始条件:树T存在,cur_e是T中某个结点 操作结果:若cur_e有右兄弟,则返回它的右兄弟,否则函数值为“空”。 性质2 深度为 k 的二叉树至多有 2 k-1个结点(k ? 1)。 证明:由性质1可见,深度为k的二叉树的最大结点数为 性质5:在完全二叉树中编号(1开始)为i的结点, 1)若有左孩子,则左孩编号为2i; 2)若有右孩子,则有孩子结点编号为2i+1; 3)若有双亲,则双亲结点编号为? i/2?; --------二叉树的顺序存储表示------------ # define MAX_TREE_SIZE 100 //二叉树的最大结点数 typedef TElemType SqBiTree[MAX_TREE_SIZE]; //0号单元存放根结点 SqBiTree bt; 链式存储结构 在顺序存储结构中,利用编号表示元素的位置及元素之间孩子或双亲的关系,因此对于非完全二叉树,需要将空缺的位置用特定的符号填补,若空缺结点较多,势必造成空间利用率的下降。在这种情况下,就应该考虑使用链式存储结构。 常见的二叉树结点结构如下所示: 这种存储结构的特点是寻找孩子结点容易,双亲比较困难。因此,若需要频繁地寻找双亲,可以给每个结点添加一个指向双亲结点的指针域,其结点结构如下所示。 6.3 二叉树的遍历 如何将二叉树线性化? 以中序遍历为例,我们看到通过遍历可以得到二叉树结点的中序序列。若能将中序序列中每个结点前趋、后继信息保存起来,以后再遍历二叉树时就可以根据所保存的结点前趋、

文档评论(0)

琼瑶文档 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档