- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)