第7章习题及解答
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本章解答只给出算法描述,1~7题略。
⒈一棵度为2
⒉对于图2所示的树,试给出:
⑴双亲数组表示法示意图;
⑵孩子链表表示法示意图;
⑶孩子兄弟链表表示法示意图。
⒊画出下图所示的森林经转换后所对应的二叉树,并指出在二叉链表中某结点所对应的森林中结点为叶子结点的条件。
(3题图) (4题图)
⒋将右上图所示的二叉树转换成相应的森林。
⒌在具有n(n>1)个结点的各棵树中,其中深度最小的那棵树的深度是多少?它共有多少叶子和非叶子结点?其中深度最大的那棵树的深度是多少?它共有多少叶子和非叶子结点?
⒍画出和下列已知序列对应的树T:
树的先根次序访问序列为:GFKDAIEBCHJ;
树的后根访问次序为:DIAEKFCJHBG。
⒎画出和下列已知序列对应的森林F:
森林的先序次序访问序列为:ABCDEFGHIJKL;
森林的中序访问次序为:CBEFDGAJIKLH。
⒏对以孩子-兄弟链表表示的树编写计算树的深度的算法。
typedef struct TreeNode{
datatype data;
struct TreeNode *child, *nextsibling ;
}NodeTtpe , *CSTree;
int high(CSTree t )
{
if ( t= =NULL )
return ( 0 ) ;
(2题图)
else
{
h1=high(t->child ) ;
h2=high(t->nextsibling );
return(max(h1+1,h2));
}
}
⒐对以孩子链表表示的树编写计算树的深度的算法。算法略
⒑对以双亲链表表示的树编写计算树的深度的算法。typedef struct{
datatype data;
int parent ;
}NodeType;
int high(NodeType t[ ], int n)
{
maxh=0;
for (i=0 ;i { if (t[i].parent= = -1) h=1; else { s=i; h=1; while (t[s].parent != -1 ) { s=t[s].parent; h++; } } if (h>maxh) maxh=h; } return(maxh); }