一、判断题
1、
答案:F
解析:对于任何一棵树,结点总数=总分支数目+1,叶子没有分支数
如果某棵树中有N0个结点,K0条边,则N0 = k0 + 1
设森林中有m棵树,其结点数分别为n1,n2,n3,.,nm
相应地,各棵树的边数分别为k1,k2,k3,…km
显然:n1 = k1 + 1,n2 = k2 + 1,.,nm = km + 1 (1)
按照题设:
n1 + n2 + n3 +…+ nm = N (2)
k1 + k2 + k3 +…+ km = K (3)
将(1) 代入(2) 得:
(k1 + 1) + (k2 + 1) + (k3 + 1) + .+ (km + 1) = N
即:
k1 + k2 + k3 + …+ km + 1 + 1 +.+ 1 = N
按照(3):
K+ m= N
于是m = N - K
树的棵数=结点数-森林边数
2、
二、单选题
1、
答案:B
解析:
(1)普通二叉树具有的性质
- 在二叉树的第 i 层上至多有2i-1个结点
- 深度为 k 的二叉树上至多含2k-1个结点(k≥1)
- 对任何一棵二叉树,若它含有n0 个叶子结点、n2 个度为 2 的结点,则必存在关系式:n0 = n2+1
(2)完全二叉树才拥有的性质
- 具有 n 个结点的完全二叉树的深度为 log2底n的整数值 +1
- 若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意一个编号为 i 的结点:
若 i=1,则该结点是二叉树的根,无双亲,否则,编号为 i/2取整数值部分的结点为其双亲结点;
若 2i>n,则结点i无左孩子, 否则,编号为 2i 的结点为结点i的左孩子结点;
若 2i+1>n,则结点i无右孩子结点,否则,编号为2i+1 的结点为结点i的右孩子结点。
(3)
- 设二叉树中度为0的叶子结点个数为n0,度为1结点个数为n1,度为2结点个数为n2,于是n0 + n1 + n2 = 1102。
- 根据二叉树性质:n0 = n 2 + 1,代入得到,2n2 + n1+1 = 1102
- 由于完全二叉树的n1 只能是0或者1(为什么完全二叉树中度为1的结点只能是1或0?如果从满二叉树中在最后一层自左向右砍掉的节点数是偶数,那么该完全二叉树中度为1的节点数就是0。如果砍掉的节点数是奇数,那么该完全二叉树中就有且仅有一个节点的度为1. )
- 为满足2n2 + n1 = 1101,n1 =1,因此n2 = 550。
- 由n0 = n 2 + 1得n0 = 551,即叶子个数是551个。
2、
答案:C
解析:
森林包含树的棵数=结点数-森林边数
所以,树的棵数=25-15=10
3、???
答案:B
解析:
(1)因为是森林和二叉树之间的转换,所以说,u和v还有可能是没有关系
一共就有这五种情况,第一种显示的是兄弟关系,第四种是父子关系,所以1、2正确
(2)对于3
若是没关系:
- u与v没有关系的话,他们之间,直接没有父节点
若是有关系:
- 对于第一种情况,要么都是兄弟,要么是同一个父节点
- 对于第二种情况,要么u的父节点是v的父节点的父节点,要么…
依次画出各种情况,然后一个个分析即可
注意:森林中的两个兄弟结点,互相之间,可能是没有关系的。对于二叉树和森林来说,左孩子,右兄弟。
4、
答案:A
解析:树的棵数=结点数-森林的边数
5、
答案:C
解析:根据森林转换为二叉树的法则,二叉树的根结点通常是第一棵树的结点,二叉树的左子树是由第一棵树删去根后所得所有子树构成的,二叉树的右子树是由其它树(第二,第三棵树)构成的,故左子树结点个数是M1-1,右子树上的结点个数是M2+M3。
森林转化为二叉树的步骤
转换步骤
步骤1:先将各树按照左孩子右兄弟的原则转化成二叉树
步骤2:然后将各二叉树通过根的右指针相连(即:按森林图形中树的先后次序,依次将后边一棵二叉树的根作为前边一棵二叉树根结点的右子树)
6、
答案:B
解析:
因为,对于普通二叉树拥有的一条性质是度数为0的结点数=度数为2的结点数+1,所以对于每一棵普通树来说,n0=n2+1。
n01=n21+1,n02=n22+1…
加和之后,N=M+X,所以X=N-M,所以B为正确答案。
7、
答案:C
解析:
如果第六层是满的话,那么第6层将会有25=32个节点,题目说只有8个叶节点,那只有两种情况:
- 6层只有8个节点,都是叶节点
- 6层节点满了,但有8个节点没有子节点,只能作为叶节点。
由于题目求更多,所以考虑第2钟情况,这时候:
- 前6层节点数为26-1=63
- 第7层节点数:(32-8)*2=48
因此,总结点数=63+48=111
8、
答案:B
解析:
因为是完全二叉树,所以编号为 i/2取整数值部分的结点为其双亲结点
17/2取整=8,19/2取整=9;
8/2取整=4,9/2取整=4;
所以是4;
9、
答案:B
解析:
对于完全二叉树来说,具有 n 个结点的完全二叉树的深度为 log2底n的整数值 +1
所以log2底65+1=6+1=7;
三、程序填空题
下列代码的功能是计算给定二叉树T的宽度。二叉树的宽度是指各层结点数的最大值。函数Queue_rear和Queue_front分别返回当前队列Q中队尾和队首元素的位置。
typedef struct TreeNode *BinTree;
struct TreeNode
{
int Key;
BinTree Left;
BinTree Right;
};
注意:末尾不需要有分号,因为题目中已经给出了分号