数据结构(C语言版清华大学出版社)课后6-7章答案
第六章 树和二叉树
选择题
1.B 2.D 3.C 4.D 5.B 6.B 7.D 8.D 9.B 10.C
填空题
99
双亲表示法、孩子表示法、孩子兄弟表示法
3. N2+1
121
[1og(2k-1)]+1 [logk]+2
5
DGEBFCA
2^(k-1) 2^k-1
10 5
n+1
应用题
9. 先序遍历 ABCDEFGH
12. 参见6.2节中的应用题第10题
算法设计题
3. 分析:利用节点在向量中存储的位置相对关系设计先序遍历算法。完全二叉树的顺序存储结构的特点是,i位置上的节点的左孩子的位置在2i,右孩子的位置在2i+1.
另外,算法利用栈实现非递归算法。
Void PreOrder_QBTree( QBTree T ){
PseqStack S;
int i=1;
S = Init_SwqStack();/* 栈初始化 */
while( i<=T.n || ! Empty_SeqStack(S) ){
if( i<=T.n ){
printf("%d ",T.data[i]);
Push_SeqStack(S,i);/* 保留i在栈区中 */
i = 2*i; /* 取左孩子 */
}else{
/* 左子树为空 ,得到右子树*/
Pop_SeqStack(S,&i);
i = 2*i+1; /* 取右孩子 */
}
}
}
6. 分析: 利用二叉树的遍历算法进行改进。根据二叉树的结构特点,将二叉树根节点的左右指针互换,同时分别递归地对左子树和右子树进行同样的操作。
算法描述如下:
void Exchange( BTree T ){
Bnode *p;
if( T ){
p = T->lchild;/* 交换左右孩子 */
T->lchild = T->rchild;
T->rchild = p;
/* 递归的对左子树和右子树进行同样的操作 */
Exchange( T->lchild );
Exchange( T->rchild );
}
}
第七章 图
选择题 1.D 2.A 3.C 4.D 5.D 6.AD 7.BC 8.AB 9.D 10.B
填空题
O(eloge) 稀疏图
队列
e 2e
求邻接矩阵第i列中非零元素个数
n
2(n-1)
N
有向图中有无回路
Prim
活动 活动之间的优先关系 事件 活动
应用题
有向图G如下所示
顶点a的入度为2,出度为1
顶点c的入度为1,出度为1
顶点d的入度为1,出度为1
顶点e的入度为1,出度为2
4.
对于图7.21a,其存储结构才用邻接矩阵表示,则其深度优先搜索遍历的顶点序列为:0->1->2->8->3->4->5->6->7->9;其广度优先搜索遍历的顶点序列为:0->1->4->2->7->3->8->6->5->9;其存储结构才用邻接表表示,则其深度优先搜索遍历的顶点序列为:0->4->3->8->9->5->6->7->1->2;其广度优先搜索遍历的顶点序列为:0->4->1->3->7->2->8->6->9->5。
对图7.21b而言,其存储结构才用邻接矩阵表示,则其深度优先搜索遍历的顶点序列为:0->1->2->5->8->4->7->3->6;其广度优先搜索遍历的顶点序列为:0->1->3->4->2->5->7->6->8;其存储结构才用邻接表表示,则其深度优先搜索遍历的顶点序列为:0->4->7->5->8->4->6->1->2;其广度优先搜索遍历的顶点序列为:0->4->3->1->7->5->6->2->8。
6.
拓扑排序:
1 6 4 2 7 5 9 3 8
6 1 4 2 7 5 9 3 8
6 4 1 2 7 5 9 3 8
d
c
e
b
a