第6章节树和二叉树1.docVIP

  1. 1、本文档共27页,可阅读全部内容。
  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文档。上传文档
查看更多
树和二叉树 树与二叉树是本书的重点内容之一,知识点多且比较零碎。其中二叉树又是本章的重点。 在本章中我们要了解树的定义、熟悉树的存储结构、遍历;二叉树的定义、性质、存储结构、遍历以及树、森林、二叉树的转换。哈夫曼树及哈夫曼编码等内容。 算法的重点是二叉树的遍历及其应用。 6.1 树的定义 一、树的定义 树: 树是n(n0)个结点的有限集合T。一棵树满足下列条件: 有且仅有一个称为根的结点; 其余结点可分为m(m=0)棵互不相交的有限集合T1, T2, T3,…Tm, 其中每个集合又是一棵树,并称之为根的子树。 有关树的一些基本概念: 1)结点的度:树中每个结点具有的子树数目或后继结点数。 如图中结点A的度为2,B的度为3 2) 树的度:所有结点的度的最大值为树的度。(图中树的度为3) 3) 分支结点:即:树中所有度大于0的结点。 4) 叶子结点:即:树中度为零的结点,也称为终端结点。 5) 孩子结点:一个结点的后续结点称为该结点的孩子结点。 6) 双亲结点:一个结点为其后继结点的双亲结点。 7) 子孙结点:一个结点的所有子树中的结点为该结点的子孙结点。 8)祖先结点:从根结点到一个结点的路径上所有结点(除自己外) 称为该结点的祖先结点。(如A和B为D结点的祖先结点) 9) 兄弟结点:具有同一父亲的结点互相为兄弟结点。(如B和C为兄弟结点) 10) 结点的层数:从根结点到该结点的路径上的结点总数称为该结点的层数(包括该结点)。 11)树的深度(高度):树中结点的最大层数为树的深度。(图中树的深度为4) 12)森林:0个或多个互不相交的树的集合。 上图中:树的度为3,树的深度为4。 结点A,B,C,D,E,F,G,H,I,J的度分别为:2, 3, 2, 0 ,2 , 0, 0, 0, 0, 0 叶结点有:D, F, G, H, I, J B,C为兄弟,D, E, F为兄弟,F, G为兄弟。I,J为兄弟。 二、树的表示 1. 树的逻辑结构描述 Tree=(D,N) 其中:D为具有相同性质的数据元素的集合。 N为D上元素之间的关系集合。 如上图中的树: D=(A,B,C,D,E,F,G,H,I,J) N={A,B,A,C,B,D,B,E,B,F,C,G,C,H,E,I,E,J} 2. 树的逻辑表示方法: (1)树形表示法:如一棵倒立的树,从根结点开始一层层向下扩展,根结点在上,叶结点在下。如上图。 (2)文氏图(嵌套表示法): 凹入表示法 广义表示法 根结点在前面,用一对圆括号把它的子结点括起来,子树结点之间用逗号隔开。 如:(A(B(D,E(I,J),F),C(G,H))) 三、树的基本性质 性质1:树中的结点总数(N)等于所有结点的度数之和(B)加1。即:N=B+1 证明: 在树的定义中,除了根结点外,每个结点都有且仅有一个前驱结点,也就是说,每个结点与指向它的一个分支一一对应,所以除了树根外的结点数等于所有结点的分支数(度数之和),即B=N-1,从而可得一棵树的结点数等于结点的度数和加1。 上述例中:10=(2+3+2+2)+1 例如: 已知一棵树中的度数为1,2,3,4的结点个数分别为6,5,4,3,求树的叶子结点的个数。 解:树中所有结点的度数之和为1*6+2*5+3*4+4*3=40  则树的总结点数为 40+1=41    树中度数非零的结点数为:6+5+4+3=18 因此零结点(叶子结点)的个数为:41-18=23个 6.2 树的存储结构及基本操作 一、树的存储结构 常用树的存储结构有四种:双亲表示法、孩子表示法、带双亲的孩子链表、孩子兄弟表示法。 双亲表示法 利用每个结点的双亲唯一性,存储结点信息的同时,附设一个指向双亲的指针parent。根结点的parent为NULL. 双亲表示法的存储结构为: Typedef struct node { char data; int parent; }PNODE; PNODE t[M]; /*用结点数组表示树*/ 这种表示法的优点是很容易找到每个结点的双亲。 缺点是很难找到每个结点的孩子。 2. 孩子表示法 又分两种方法: 多重链表 每个结点中有一个数据域和多个指针域,指针域指向该结点的孩子。 由于每个结点的孩子数并不一定相同,因此结点指针域的个数怎么设计呢? 通常有两种方案: 一种是: 结点同构,即所有结点指针域个数相同,等于树的度。 这种方法的缺点是浪费空间,优点是处理起来简单。 另一种是:结点异构即指针个数不等按各自的子树数设置。应该在每个结点的信息中包含该结点子树的个数信息。 这种方法的优点是

文档评论(0)

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

分享好文档!

1亿VIP精品文档

相关文档