第六章树和二叉树--树和森林

一、判断题

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;
};

在这里插入图片描述

注意:末尾不需要有分号,因为题目中已经给出了分号

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值