数据结构辅导2012树型结构..docVIP

  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文档。上传文档
查看更多
数据结构辅导2012树型结构.

数据结构辅导2012 树形结构部份: 基本知识点:树的定义及相关术语、树的表示及树的性质。二叉树的定义、二叉树的性质、满二叉树和完全二叉树的定义、二叉树的顺序存储和链式存储、二叉树的遍历过程、二叉树的线索化过程、哈夫曼树的定义与构造方法以及二叉树与森林之间的转换。 递归的相关概念。 重点:二叉树的性质、二叉树的遍历(二叉树各种遍历方法及它们所确定的序列之间的关系)、二叉树的线索化方法,构造哈夫曼树。 递归模型、递归算法的执行过程和递归设计思想。 难点:二叉树上各种算法特别是递归算法的设计和非递归算法的设计。 将递归算法转化为非递归算法。 (重点要求掌握二叉树的二叉链表存储表示结构下的递归算法。) 树形结构知识体系结构 树 二叉树 二叉树和树 例题:已知A[n]为整数数组,编写一个递归算法,求n个元素的平均值。 解:算法如下: int average(int A[], int n) { if(n==1) return A[0]; else return (average(A,n-1)*(n-1)+A[n-1])/n; } 例6.2:有一个不带头结点的单链表,其结点类型如下: typedef int ElemType; typedef struct node { ElemType data; struct node *next; }Node; 设计如下递归算法: (1)求以H为头指针的单链表的结点个数。 (2)正向显示以H为头指针的单链表的所有结点值。 (3)反向显示以H为头指针的单链表的所有结点值。 (4)删除以H为头指针的单链表中值为x的第一个结点。 (5)删除以H为头指针的单链表中值为x的所有结点。 (6)求出以H为头指针的单链表中最大结点值。 (7)求出以H为头指针的单链表中最小结点值。 解:递归算法分别如下: int Count(Node *H) { if(H==0) return 0; else return 1+Count(H-next); } (2) void traverse(Node *H) { if(H==0) return; coutH-data; traverse(H-next); } (3) void traverseR(Node *H) { if(H==0) return; c traverse(H-next); outH-data; } (4) void delFirstx(Node *H, ElemType x) { Node *t; if(H==0) return; if(H-data==x) { t=H; H=H-next; delete t; return; } delFirstx(H-next, x); } (5) void delAllx(Node *H, ElemType x) { Node *t; if(H==0) return; if(H-data==x) { t=H; H=H-next; delete t; } delAllx(H-next, x); } (6) ElemType Maxv(Node *H) { ElemType m; if(H-next==0) return H-data; m=Maxv(H-next); if(mH-data) return m; else return H-data; } (7) ElemType Minv(Node *H) { ElemType m; if(H-next==0) return H-data; m=Minv(H-next); if(mH-data) return m; else return H-data; } 例题 一棵完全二叉树上有1001个结点,问其中叶子结点个数是多少? 答案:501 注:n0+n1+n2=n, n-1=n1+2n2, n0=n2+1, n1=0或n1=1; n=2*n0+n1-1,n=1001, 故n1=0,n0=501。 例题 一棵有124个叶子结点的完全二叉树中,最多有多少个结点? 答案:248 注:n=n0+n1+n2=n0+n1+n0-1=2*n0+n1-1, n1最多为1。n=2*124=248。 例题 设有13 个值,用它们组成一棵哈夫曼树,问该哈夫曼树有多少个结点? 答案:25 注:有m个叶结点的哈夫曼树共有2m-1个结点。2*13-1=25。 例题 问8层完全二叉树至少有多少个结点? 答案:128 注:1+2+4+8+16+32+64+1=128 例题 问拥有100个结点的完全二叉树的最大层数是多少? 答案:7 例题 已知二叉树有50个叶子结点,则该二叉树的结点总数至少是多少? 答案:99 注:n0=n2

文档评论(0)

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

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

1亿VIP精品文档

相关文档