- 1、本文档共39页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
作业讲解(第三、四、五、六章)课件
习题讲解(第三、四、五、六章); 3-10设稀疏矩阵Mm*n中有t个非零元素,用三元组表的方式存储. 请设计一个算法,计算矩阵M的转置矩阵N ,且算法的时间复杂性为O(n+t). 注意,书中给出的算法的复杂性为O(n*t).;A=;3-10;TP2[计算存储位置]
//定义数组num存储A中每列非零元素个数
FOR i=0 TO n-1 DO
num[i]←0.
FOR i=0 TO t-1 DO
( j ←col(A[i]).
num[j]←num[j]+1. )
//数组pos存储A中每列第一个非零元素在B中的位置
pos[0] ← 0 .
FOR i=1 TO n-1 DO
(pos[i] ←pos[i-1]+num[i-1] . )
;TP3[处理三元组表]
FOR i=0 TO t-1 DO
( p←col(A[i]).
k←pos[p].
col( B[k]) ← row(A[i]).
row(B[k]) ←col(A[i]).
val(B[k]) ← val(A[i]).
pos[p]← pos[p]+1.) ▌
;4-2;4-2;4-3;;数学归纳法;4-5; 根据完全二叉树的定义可知,对完全二叉树层次遍历应满足:
1)若某结点没有左孩子,则一定无右孩子;
2)若某结点有左孩子,但无右孩子,则其层次序列所有后继结点一定是叶结点。
3)叶结点的层次序列的所有后继结点一定是叶结点。
为此,在层次遍历二叉树时,增加一个标志B,B=1表示所有已扫描过的结点均有左、右孩子,B=0,表示遇到无左或右孩子的结点,此后的所有结点均应为叶结点。;bool completetree(BintreeNode * t)
{ Queue Q;
Bool B=1, CM=1;
if (t!=NULL)
{ Q.Insert(t);
while (!Q.QueueEmpty() B) //层次遍历 { p=Q.Delete();
if (p-left = = NULL)
{B=0; if (p-right != NULL) return false; }
else {Q.Insert(p-left);
if (p-right = = NULL) B=0;
else Q.Insert(p-right); }
}
while (!Q.QueueEmpty())
{ p=Q.Delete();
if ( p-left ! = NULL) || ( p-right ! = NULL) return false; }
}; return true;
};4-10;4-10;[解题思路1]
树的深度dept(t)=max(t的各子树的深度)+1
算法 Depth(t. d)
D1[递归出口]
IF t=NULL THEN ( d← -1 . RETURN )
IF (GFC(t)=NULL) THEN ( d← 0 . RETURN )
D2[递归调用]
p=GFC(t). Max ← -1. // Max存储各子树的最大深度
WHILE (p≠NULL)
( Depth(p. dp).
IF (dpMax) THEN Max←dp.
p←GNB(p). ).
d← Max+1 . RETURN.
) ▌;[解题思路2]
基于所对应的二叉树:
dept(t)=max(左子树的深度+1,右子树的深度)
;
算法 Depth(t. d)
D1[递归出口]
IF t=NULL THEN ( d← -1 . RETURN )
D2[递归调用]
Depth(GFC(t). d1)
Depth(GNB(t). d2)
Max(d1+1, d2).
RETURN.
) ▌;[解题思路3]
对树做层次遍历,每遍历一层树的深度+1.
关键在于如何判断本层遍历的结束。
文档评论(0)