《数据结构(C语言版)》教案 第5章 树(电子版).docVIP

《数据结构(C语言版)》教案 第5章 树(电子版).doc

  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文档。上传文档
查看更多
第5章 树 本章教学提要 教学重点:树的定义、表示方法 树的基本运算 二叉树的定义 二叉树的遍历 二叉排序树 教学难点:二叉排序树的删除 哈夫曼树 本章教学内容 树形结构不同于以往的线性数据结构,它能反映节点之间有分支的、层次结构,是一种重要的非线性数据结构, 很类似于自然界中的树。 在计算机领域中,树形结构的应用很广泛,它不仅是计算机中常出现的数据,而且在实现各种算法时,树形结构也起着很重要的作用。 5.1 树的定义和运算 树的定义:树是n(n≥0)个节点组成的有限集合T。其中,当n=0时,即不含节点的树是一棵空树。当n≥1时,即至少含有一个节点的树是一棵非空树。在一棵非空树中,满足: 有且只有一个特定的称为根(root)的节点。 2.除根节点外,其余节点被分成m(m≥0) 个互不相交的集合,…,而这些集合中的每一个集合本身又是一棵树,我们称Ti (1≤i≤m)为根的子树(subtree)。 树的表示方法有多种,有树形表示法(如图5.1),还有文氏图表示法,凹入表示法和嵌套括号表示法。 树的基本术语: 节点的度和树的度:每个节点具有的子树的个数为节点的度(degree)。 分支节点:度大于零的节点称作分支节点,又叫非终端节点。 叶子节点:度等于零的节点称作叶子节点,又叫终端节点。 孩子、双亲、兄弟节点:每个节点的子树的根称为该节点的孩子(child),相应地,该节点被称为孩子的双亲(parent)。我们也称后继为孩子,称前驱为双亲。 节点的层数和树的深度:根节点的层数为1,其它节点的层数等于它父母节点的层数加1。树中节点的最大层数为树的深度或高度(depth)。 有序树:若树T中节点的各子树是按照一定次序从左向右排列的,则称树T为有序树,否则称为无序树。 树的基本运算 1.求根节点(root(T)或root(x)):求树T的根节点或求节点所在的子树的根节点。如果T是空树或x不在任何一棵树上,则root(T)或root(x)值为“空”。 2.求双亲节点(parent(T,x)):求树T中的节点x的双亲节点。若节点x是树T的根节点或x不在树T中,则parent(T,x)的值为空。 3.求左兄弟节点(left_sibling(T,x)):求树T中节点x左边的兄弟。 此外,还有插入,删除,遍历运算。 5.2 二叉树的遍历 二叉树(binary tree)是一种最简单、最重要的树形结构。它的特点是:树中每个节点最多只有两棵子树,即二叉树中任何节点的度数都小于或等于2,那么二叉树或者是一棵空树,或者是一棵由一个根节点和至多两棵互不相交的子二叉树组成的,这两棵子二叉树分别称为左子树和右子树。 遍历二叉树就是按照一定次序访问树中每个节点,使每个节点都被访问一次,且仅被访问一次。 三种遍历方法:先根遍历算法;中根遍历算法;后根遍历算法。 5.3二叉排序树 二叉排序树又称二叉查找树,它或者是一棵空树,或者是一棵具有下列特性的非空二叉树。 1.若它的左子树非空,则左子树上所有节点的值都小于根节点的值。 2.若它的右子树非空,则右子树上所有节点的值都不小于根节点的值。 3.左、右子树本身又各是一棵二叉排序树。 二叉排序树的插入运算比较简单,在二叉排序树中插入新节点后的树必须仍然是二叉排序树。插入的原则:若二叉排序树为空,则插入节点为新的根节点,若插入节点值小于根节点值,则插入左子树,若插入节点值大于根节点值,则插入右子树。在子树中又与子树根比较,如此进行下去,直到把新节点插入到二叉树中作为一个叶子节点。 无论删除二叉树中的哪个节点,都还应满足排序二叉树的定义。下面分三种情况来说明删除的过程: 1.删除叶子节点:这种删除实现很简单,因其既无左孩子又无右孩子,所以直接删除该节点即可。 2.删除单分支节点:即删除一个只有左孩子(或右孩子)的节点。若删除一个只有左孩子的单分支节点,则用它的左孩子取代被删除的节点,原来左子树内各节点之间关系不变,若删除一个只有右孩子的单分支节点,情况类似。 3.删除双分支节点:这种删除是删除既有左孩子又有右孩子的节点。删除方法有两种,或者用左子树中最大的节点来取代被删除的节点,或者用右子树中最小的节点来取代被删除的节点。 5.4 哈夫曼树 哈夫曼树,又称最优二叉树,是带权路径长度最短的二叉树。 基本术语: 路径长度:从树中一个节点到它祖先的某个节点之间的分支构成这两个节点之间的路径,路径上的分支数目称作路径长度。路径长度等于路径上的节点数减1。 树的路径长度:从树根到每一节点的路径长度之和。 节点的权和带权路径长度:我们把树中的节点赋上一个有特殊意义的实数,这个实数称为该节点的权。节点的带权路径长度为该节点到树根之间的路径长度与节点上权的乘积。 树的带权路径长度:树中所有叶子节点的带权路径长度之和就是树的带权路径长度。记作W

文档评论(0)

小教资源库 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档