第6-10章--树和二叉树--答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[解答]
(1)顺序表示
0
1
2
3
4
5
6
7
8
9







10
11
12
13
14
15
16
17


(2)二叉链表表示
3.在结点个数为n(n>1)的各棵树中,高度最小的树的高度是多少?它有多少个叶结点?多少个分支结点?高度最大的树的高度是多少?它有多少个叶结点?多少个分支结点?
[解答]
结点个数为n时,高度最小的树的高度为1,有2层;它有n-1个叶结点,1个分支结点;高度最大的树的高度为n-1,有n层;它有1个叶结点,n-1个分支结点。
第6章树和二叉树
一、基础知识题
1.列出右图所示二叉树的叶结点、分支结点和每个结点的层次。
[解答]二叉树的叶结点有⑥、⑧、⑨。分支结点有①、
②、③、④、⑤、⑦。结点①的层次为0;结点②、
③的层次为1;结点④、⑤、⑥的层次为2;结点⑦、
⑧的层次为3;结点⑨的层次为4。
2.使用(1)顺序表示和(2)二叉链表表示法,分别画出右图所示二叉树的存储表示。
(3)二叉树的前序序列与后序序列相同:空树或只有根结点的二叉树。
7.填空题
(1)对于一棵具有n个结点的树,该树中所有结点的度数之和为n-1。
(2)假定一棵三叉树的结点个数为50,则它的最小高度为4,最大高度为49。
(3)一棵高度为h的四叉树中,最多含有(4h+1-1)/3结点。
(4)在一棵三叉树中,度为3的结点数有2个,度为2的结点数有1个,度为1的结点数为2个,那么度为0的结点数有6个。
}//while
}//PreOrder_Nonrecursive
3.编写递归算法,计算二叉树中叶子结点的数目。
[解答]
int LeafCount_BiTree(Bitree T)//求二叉树中叶子结点的数目
{
if(!T) return 0; //空树没有叶子
else if(!T->lchild&&!T->rchild) return 1; //叶子结点
(10)有回路的有向图不能完成拓扑排序;
(11)在AOE网络中一定只有一条关键路径;
(12)关键活动不按期完成就会影响整个工程的完成时间;
(13)任何一个关键活动提前完成,那么整个工程将会提前完成;
(14)所有的关键活动都提前完成,那么整个工程将会提前完成;
(15)任何一个关键活动延迟,那么整个工程将会延迟。
(5)一棵高度为5的满二叉树中的结点数为63个,一棵高度为3的满四叉树中的结点数为85个。
(6)在一棵二叉树中,假定度为2的结点有5个,度为1的结点有6个,则叶子结点数有6个。
(7)对于一棵含有40个结点的理想平衡树,它的高度为5。
(8)若对一棵二叉树从0开始进行结点编号,并按此编号把它顺序存储到一堆数组a中,即编号为0的结点存储到a[0]中,其余类推,则a[i]元素的左子女结点为2×i+1,右子女结点为2×i+2,双亲结点(i≥1)为 。
(4)有n(n≥1)个顶点的无向连通图最少有n-1条边;
(5)有n(n≥1)个顶点的有向强连通图最少有n条边;
(6)存储无向图的邻接矩阵是对称的,因此只要存储领接矩阵的下(上)三角部分就可以了;
(7)连通分量是无向图中的极小连通子图;
(8)强连通分量是有向图中的极大强连通子图;
(9)对任何用顶点表示活动的网络(AOV网)进行拓扑排序的结果都是唯一的;
return 1;
else return 0;
}//Bitree_Sim
2.试利用栈的基本操作写出先序遍历的非递归形式的算法。
[解答]
void PreOrder_Nonrecursive(Bitree T)//先序遍历二叉树的非递归算法
{
InitStack(S);
Push(S,T); //根指针进栈
4.试分别画出具有3个结点的树和3个结点的二叉树的所有不同形态。
[解答]
具有3个结点的树具有3个结点的二叉树
5.如果一棵树有n1个度为1的结点,有n2个度为2的结点,…,nm个度为m的结点,试问有多少个度为0的结点?试推导之。
[解答]
总结点数n=n0+n1+n2+…+nm
总分支数e=n-1= n0+n1+n2+…+nm-1
while(!StackEmpty(S))
{
while(Gettop(S,p)&&p)
{
visit(p->data);
push(S,p->lchild);
} //向左走到尽头
pop(S,p);
if(!StackEmpty(S))
{
pop(S,p);
push(S,p->rchild); //向右一步
}
0
A

1
B
2
C
3
D
4
E

5
F
i
j
ilink
jlink
0
1

0
3


1
2

1
4


2
5


3
1

3
4

5
4


4.用邻接矩阵表示图时,矩阵元素的个数与顶点个数是否相关?与边的条数是否相关?
[解答]
用邻接矩阵表示图,矩阵元素的个数是顶点个数的平方,与边的条数无关。矩阵中非零元素的个数与边的条数有关。
5.对于有n个顶点的无向图,采用邻接矩阵表示,如何判断以下问题:图中有多少条边?任意两个顶点i和j之间是否有边相连?任意一个顶点的度是多少?
(5)若有一个叶子结点是二叉树中某个子树的前序遍历结果序列的最后一个结点,则它一定是该子树的中序遍历结果序列的最后一个结点。
[解答]
(1)√(2)×(3)×(4)√(5)×
二、算法设计题
1.若已知两棵二叉树B1和B2皆为空,或者皆不空且B1的左、右子树和B2的左、右子树分别相似,则称二叉树B1和B2相似。试编写算法,判别给定两棵二叉树是否相似。
[解答]
用邻接矩阵表示无向图时,因为是对称矩阵,对矩阵的上三角部分或下三角部分检测一遍,统计其中的非零元素个数,就是图中的边数。如果邻接矩阵中A[i][j]不为零,说明顶点i和j之间有边相连。此外统计出矩阵第i行或第j列的非零元素个数,就可得到顶点i的度数。
6.对于如下图所示的有向图,试写出:
(1)从顶点①出发进行深度优先搜索所得到的深度优先生成树;
else return Leaf_Count(T->lchild)+Leaf_Count(T->rchild);//左子树的叶子数加上右子树的叶子数
}//LeafCount_BiTree
4.编写按层次顺序(同一层自左至右)遍历二叉树的算法。
[解答]
void LayerOrder(Bitree T)//层序遍历二叉树
(2)从顶点②出发进行广度优先搜索所得到的广度优先生成树。
[解答]
(1)以顶点①为根的深度优先生成树(不唯一):
(2)以顶点②为根的广度优先生成树:
7.试对下图所示的AOE网络,解答下列问题。
(1)这个工程最早可能在什么时间结束。
(2)求每个事件的最早开始时间Ve[i]和最迟允许开始时间Vl[i]。
(3)求每个活动的最早开始时间e()和最迟允许开始时间l()。
(4)确定哪些活动是关键活动。画出由所有关键活动构成的图,指出哪些活动加速可使整个工程提前完成。
[解答]
按拓扑有序的顺序计算各个顶点的最早可能开始时间Ve和最迟允许开始时间Vl。然后再计算各个活动的最早可能开始时间e和最迟允许开始时间l,根据l—e是否等于0来确定关键活动,从而确定关键路径。
从顶点F出发,到其他各个顶点的简单路径有F→E。
3.给出右图的邻接矩阵、领接表和领接多重表表示。
[解答]
(1)邻接矩阵
(2)邻接表
0
A
1
B
2
C
3
D
4
E

5
F
1
2
5

4

4

3

(出边表)
1
4

0
A

1
B
2
C
3
D
4
E
5
F
0
1

2

3

(入边表)
0

1
3
5

(3)邻接多重表(十字链表)
data
fin
fout
(3)在一个具有n个顶点的无向图中,要连通所有顶点则至少需要条边。
(4)表示图的三种存储结构为、和。
(5)对于一个具有n个顶点的图,若采用邻接矩阵表示,则矩阵大小为。
(6)对于一个具有n个顶点和e条边的有向图和无向图,在其对应的邻接表中,所含边结点分别为和条。
(7)在有向图的邻接表和逆领接表表示中,每个顶点的边链表中分别链接着该顶点的所有和结点。
1①
2②
3③
4④
5⑤
6⑥
Ve
0
19
15
29Hale Waihona Puke Baidu
38
43
Vl
0
19
15
37
38
43
<1,2>
<1,3>
<3,2>
<2,4>
<2,5>
<3,5>
<4,6>
<5,6>
e
0
0
15
19
19
15
29
38
l
17
0
15
27
19
27
37
38
e-l
17
0
0
8
0
12
8
0
此工程最早完成时间为43。关键路径为<1,3><3,2><2,5><5,6>
(2)若有一个结点是二叉树中某个子树的中序遍历结果序列的最后一个结点,则它一定是该子树的前序遍历结果序列的最后一个结点;
(3)若有一个结点是二叉树中某个子树的前序遍历结果序列的最后一个结点,则它一定是该子树的中序遍历结果序列的最后一个结点;
(4)若有一个叶子结点是二叉树中某个子树的中序遍历结果序列的最后一个结点,则它一定是该子树的前序遍历结果序列的最后一个结点;
9.n个结点可构造出多少种不同形态的二叉树?若有3个数据1,2,3,输入它们构造出来的中序遍历结果都为1,2,3的不同二叉树有哪些?
[解答]
有 /(n+1)种。当n=3时,中序遍历都为1,2,3的不同二叉树有5种:
10、判断下列叙述的对错。如果正确,在题前打“√”,否则打“×”。
(1)二叉树是树的特殊情形;
[解答]
int Bitree_Sim(Bitree B1,Bitree B2)//判断两棵树是否相似的递归算法
{
if(!B1&&!B2) return 1;
else if(B1&&B2&&Bitree_Sim(B1->lchild,B2->lchild)&&Bitree_Sim(B1->rchild,B2->rchild))
{
InitQueue(Q); //建立工作队列
EnQueue(Q,T);
while(!QueueEmpty(Q))
{
DeQueue(Q,p);
visit(p);
if(p->lchild) EnQueue(Q,p->lchild);
if(p->rchild) EnQueue(Q,p->rchild);
2.右边的有向图是强连通的吗?请列出所有的简单路径。
[解答]
判断一个有向图是否强连通,要看从任一顶点出发是否能够回到该顶点。右面的有向图做不到这一点,它不是强连通的有向图。各个顶点自成强连通分量。
所谓简单路径是指该路径上没有重复的顶点。
从顶点A出发,到其他的各个顶点的简单路径有A→B,A→D→B,A→B→C,A→D→B→C,A→D,A→B→E,A→D→E,A→D→B→E,A→B→C→F→E,A→D→B→C→F→E,A→B→C→F,A→D→B→C→F。
从顶点B出发,到其他各个顶点的简单路径有B→C,B→C→F,B→E,B→C→F→E。
从顶点C出发,到其他各个顶点的简单路径有C→F,C→F→E。
从顶点D出发,到其他各个顶点的简单路径有D→B,D→B→C,D→B→C→F,D→E,D→B→E,D→B→C→F→E。
从顶点E出发,到其他各个顶点的简单路径无。
}
}//LayerOrder
第七章图
一、基础知识题
1.画出1个顶点、2个顶点、3个顶点、4个顶点和5个顶点的无向完全图。并证明在n个顶点的无向完全图中,边的条数为n(n-1)/2。
[解答]
[证明]
在有n个顶点的无向完全图中,每一个顶点都有一条边与其他某一顶点相连,所以每一个顶点有n-1条边与其他n-1个顶点相连,总计n个顶点有n(n-1)条边。但在无向图中,顶点i到顶点j与顶点j到顶点i是同一条边,所以总共有n(n-1)/2条边。
=m×nm+(m-1)×nm-1+…+2×n2+n1
则有n0=
6.试分别找出满足以下条件的所有二叉树:
(1)二叉树的前序序列与中序序列相同;
(2)二叉树的中序序列与后序序列相同;
(3)二叉树的前序序列与后序序列相同。
[解答]
(1)二叉树的前序序列与中序序列相同:空树或缺左子树的单支树;
(2)二叉树的中序序列与后序序列相同:空树或缺右子树的单支树;
[解答]
(1)√(2)×(3)√(4)√(5)√
(6)√(7)×(8)√(9)×(10)√
(11)×(12)√(13)×(14)√(15)√
9.填空题
(1)在一个无向图中,所有顶点的度数之和等于所有边数的倍。
(2)在一个具有n个顶点的无向完全图中,包含有条边,在一个具有n个顶点的有向完全图中,包含在条边。
8.判断题
(1)用邻接矩阵存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小只与图中的顶点个数有关,而与图的边数无关。
(2)邻接表只能用于有向图的存储,领接矩阵对于有向图和无向图的存储都适用;
(3)邻接矩阵只适用于稠密图(边数接近于顶点数的平方),邻接表适用于稀疏图(边数远小于顶点数的平方);
相关文档
最新文档