- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]数据结构课件本10第六章
数 据 结 构 复习内容 数据的逻辑结构包括哪些? 线性结构的逻辑特征 树形结构的逻辑特征 第六章 树和二叉树 6.1 树的定义和基本术语 6.2 二叉树 6.3 遍历二叉树和线索二叉树 6.4 树和森林 6.6 赫夫曼树及其应用 6.1 树的定义和基本术语 树是n(n≥0)个结点的有限集。在任意一棵非空树中 (1)有且仅有一个特定的,称为根的结点 (2)当n1时,其余结点可分为m个互不相交的有限集T1,T2,…,Tm,其中每一个集合本身又是一棵树,并且称为根的子树。 树的逻辑特征: (1)树中只有根结点无直接前驱 (2)除了根结点,其余结点都有且仅有一个直接前驱 (3)树中每个结点可以有零个或多个直接后继 树的基本操作 树的表示法: 树形表示法、嵌套集合表示法、 广义表表示法、凹入表表示法等。 树的基本术语 结点:在树中一个元素称为一个结点。 结点的度:结点拥有的子树数。 叶子结点或终端结点:度为零的结点。 分支结点或非终端结点:度不为零的结点。 树的度:树内各结点度的最大值。 孩子和双亲:结点的子树的根称为该结点的孩子,相应的该结点称为孩子的双亲。 兄弟:同一个双亲的孩子之间互称兄弟。 祖先和子孙:结点的祖先是从根到该结点所经分支上的所有结点。以某结点为根的子树中的任一结点都称为该结点的子孙。 结点的层次:从根开始定义,根为第一层,根的孩子为第二层。若某结点在第i层,则其子树的根就在第i+1层。 堂兄弟:其双亲在同一层上的结点互为堂兄弟 树的深度:树中结点的最大层次称为树的深度 有序树和无序树:如果将树中结点的各子树看成从左至右是有次序的,则称该树为有序树,否则称为无序树。 森林:森林是m棵互不相交的树的集合。 6.2 二叉树 一、二叉树的定义 二叉树是n(n≥0)个结点的有限集,它或者为空,或者由一个根结点及两棵互不相交的、分别称作这个根的左子树和右子树的二叉树组成。 例如 二叉树的特点: (1)每个结点至多有两棵子树(即不存在度大于2的结点) (2)二叉树结点的子树有左右之分 二叉树的五种形态: 二叉树的基本操作 二叉树的性质 性质1 在二叉树的第i层上至多有2i-1个结点 二叉树的性质 性质2 深度为k的二叉树至多有2k-1个结点 性质3 对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0 = n2 +1 性质4 具有n个结点的完全二叉树的深度为log2n +1 满二叉树:一棵深度为k且有2k-1个结点的二叉树 完全二叉树:深度为k,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1到n的结点一一对应时,称之为完全二叉树。 完全二叉树的特点 (1)叶子结点只可能在层次最大的两层上出现 (2)对任一结点,若其右分支下的子孙的最大层次为L,则其左分支下的子孙的最大层次必为L或L+1 性质5 如果对一棵有n个结点的完全二叉树的结点按层次顺序编号,则对任一结点有: (1)如果i=1,则结点i是二叉树的根,无双亲;如果i1,则其双亲是结点 i/2 (2)如果2in,则结点i无左孩子;否则其左孩子是结点2i (3)如果2i+1n,则结点i无右孩子;否则其右孩子是结点2i+1 三、二叉树的存储结构 1、顺序存储结构 用一组连续的存储单元依次自上而下、自左至右存储完全二叉树上的结点元素,即将完全二叉树上编号为i的结点元素存储在一维数组的下标为i的分量中。 2、链式存储结构(二叉链表和三叉链表) 二叉链表的类型描述 typedef char TElemType; typedef struct BiNode{ TElemType data; struct BiNode *lchild,*rchild; }BiNode,*BiTree; 三叉链表 在三叉链表中每个结点的结构如下: 作业 复习本次课的内容 习题集6.1 6.2 6.3 补充1:试采用顺序存储方法和链式存储方法分别画出习题集p39图示二叉树的存储结构。 预习6.3节 6.3 遍历二叉树和线索二叉树 一、遍历二叉树 二叉树的遍历是指按照某种顺序访问二叉树中的每个结点,使每个结点都被访问一次且仅被访问一次。 常用的遍历算法: 先序遍历 中序遍历 后序遍历 先序(根)遍历二叉树的操作定义为: 若二叉树为空,则空操作;否则 (1)访问根结点 (2)先序遍历左子树 (3)先序遍历右子树 算法实现 中序(根)遍历二叉树的操作定义为: 若二叉树为空,则空操作;否则 (1)中序遍历左子树 (2)访问根结点 (3)中序遍历右子树 算法实现 后序(根)遍历二叉树的操作定义为: 若二叉树为空,则空操作;否则 (1)后序遍历左子树 (2)后序
文档评论(0)