- 1、本文档共31页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第五章 树和二叉树 树是一类重要的非线性数据结构,是以分支关系定义的层次结构 5.1 树的概念 定义 定义:树(tree)是n(n0)个结点的有限集T,其中: 有且仅有一个特定的结点,称为树的根(root) 当n1时,其余结点可分为m(m0)个互不相交的有限集T1,T2,……Tm,其中每一个集合本身又是一棵树,称为根的子树(subtree) 特点: 树中至少有一个结点——根 树中各子树是互不相交的集合 基本术语 结点(node)——表示树中的元素,包括数据项及若干指向其子树的分支 结点的度(degree)——结点拥有的子树数 叶子(leaf)——度为0的结点 孩子(child)——结点子树的根称为该结点的孩子 双亲(parents)——孩子结点的上层结点叫该结点的~ 兄弟(sibling)——同一双亲的孩子 树的度——一棵树中最大的结点度数 结点的层次(level)——从根结点算起,根为第一层,它的孩子为第二层…… 深度(depth)——树中结点的最大层次数 有序树——树中各结点的子树是按照一定次序从左向右安排的。否则为无序树 森林(forest)——m(m?0)棵互不相交的树的集合 树的性质 性质1:树中结点数等于所有结点的度数加1 性质2:度为K的树中第i层上至多有ki-1个结点 性质3:深度为h的k叉树至多有(kh-1)/(k-1)个结点 5.2 二叉树 定义 定义:二叉树是n(n?0)个结点的有限集,它或为空树(n=0),或由一个根结点和两棵分别称为左子树和右子树的互不相交的二叉树构成 特点 每个结点至多有二棵子树(即不存在度大于2的结点) 二叉树的子树有左、右之分,且其次序不能任意颠倒 基本形态 二叉树性质 性质1:二叉树上终端结点数等于双分支结点数加1。 证明:终端结点数n0,单分支结点数n1,双分支结点数n2, 总结点数为n0+n1+n2= n1+2n2+1 即n0=n2+1 满二叉树 性质4:如果对一棵有n个结点的完全二叉树的结点按层序编号,则对任一结点i(1?i?n),有: (1) 如果i=1,则结点i是二叉树的根,无双亲;如果i1,则其双亲是?i/2? (2) 如果2in,则结点i无左孩子;如果2i?n,则其左孩子是2i (3) 如果2i+1n,则结点i无右孩子;如果2i+1?n,则其右孩子是2i+1 性质5: 具有n个(n0)结点的完全二叉树的深度为log2(n+1) (向上取整)或?log2n? +1 理想平衡二叉树:若除最后一层外,其余层都是满的,而最后一层上的结点可以任意分布,则称此树为理想平衡二叉树 二叉树的运算 二叉树的运算主要有: 初始化二叉树 建立二叉树 遍历二叉树 查找二叉树 输出二叉树 清除二叉树 二叉树的存储结构 顺序存储结构 实现:按满二叉树的结点层次编号,依次存放二叉树中的数据元素 特点: 结点间关系蕴含在其存储位置中 浪费空间,适于存满二叉树和完全二叉树 链式存储结构 二叉链表 5.3 二叉树的遍历 方法 先序遍历:先访问根结点,然后分别先序遍历左子树、右子树 中序遍历:先中序遍历左子树,然后访问根结点,最后中序遍历右子树 后序遍历:先后序遍历左、右子树,然后访问根结点 按层次遍历:从上到下、从左到右访问各结点 算法(递归算法) 5.5 树的存储结构和运算 树的存储结构 树的顺序存储结构 树的顺序存储结构同样需要使用一个一维数组,存储方法是:首先对树中每个结点进行编号,然后以各结点的编号为下标,把结点值对应存储到相应元素中。 树的链接存储结构 双亲表示法 实现:定义结构数组存放树的结点,每个结点含两个域: 数据域:存放结点本身信息 双亲域:指示本结点的双亲结点在数组中位置 特点:找双亲容易,找孩子难 标准方式 在这种方式中,树中的每个结点除了包含有存储数据元素的值域外,还包含有k个指针域,用来分别指向k个孩子结点,或者说,用来分别链接k棵子树,其中k为树的度。结点的类型可定义为: struct GTreeNode { ElemType data; /*结点值域*/ struct GTreeNode* t[k]; /*结点指针域t[0]~t[k-1]*/ }; 广义标准方式 广义标准方式是在标准方式的每个结点中增加一个指向其双亲结点的指针域。结点的类型可定义为: struct PGTreeNode { ElemType data; /*结点值域*/ struct PGTreeNode* t[k]; /*
您可能关注的文档
- 《软件工程导论》(超全)课后习题答案-第五版-张海藩(精品·公开课件).ppt
- 《软件工程导论》张海潘 第五版 清华 课后答案(精品·公开课件).ppt
- 《软件工程基础》第2章-软件开发过程(精品·公开课件).ppt
- 《软件开发流程实训教程》第1章(精品·公开课件).ppt
- 《三国演义》之赤壁之战(精品·公开课件).ppt
- 《三峡》公开课课件(精品·公开课件).ppt
- 《山村》多媒体课件(教科版一年级上册识字一)1(精品·公开课件).ppt
- 《山米与白鹤》课件2(精品·公开课件).ppt
- 《扇形统计图》课件[新授(精品·公开课件).ppt
- 《商业管理信息系统》-第3章 商业企业MIS系统及其应用(精品·公开课件).ppt
文档评论(0)