挑战你的数据结构技能:复习题来袭【5】



chap6 练习1

一. 单选题(共18题,100分)

  1. (单选题)
    在这里插入图片描述

正确答案: C:在完全二叉树中,若一个结点没有左孩子,则它必是叶结点 ;
答案解析

A不正确。度为2的有序树可能是二叉树,但也可能不是。二叉树的定义是每个节点最多有两个子树,且子树有顺序,不能颠倒1。
B不完整。含有n个节点的二叉树的高度至少为log2(n+1),这是因为二叉树的高度是从1开始计算的1。
C正确。在完全二叉树中,如果一个节点没有左孩子,则它必是叶结点。因为在完全二叉树中,节点是从上到下、从左到右填充的,所以如果一个节点没有左孩子,那么它也不会有右孩子,因此它是一个叶结点1。
D. 不正确。在二叉排序树中,删除某个节点后再将其插入,得到的二叉排序树可能与原来的不同,因为删除操作可能会改变树的结构,尤其是当删除的节点有两个子节点时。

  1. (单选题)
    以下说法中,正确的是()
    A.在完全二叉树中,叶子结点的双亲的左兄弟(若存在)一定不是叶子结点
    B.任何一棵二叉树,叶子结点个数为度为2的结点数减1,即
    C.完全二叉树不适合顺序存储结构,只有满二叉树适合顺序存储结构
    D.结点按完全二叉树层序编号的二叉树中,第i个结点的左孩子的编号为2i

正确答案: A:在完全二叉树中,叶子结点的双亲的左兄弟(若存在)一定不是叶子结点 ;
答案解析

A. 分析:在完全二叉树中,节点是从上到下、从左到右逐层填充的。因此,如果一个叶子节点的父节点的左兄弟存在,那么该左兄弟一定有子节点(因为节点按层次填满)。因此,叶子节点的父节点的左兄弟不可能是叶子节点。
B. 任何一棵二叉树,叶子结点个数为度为2的结点数+1
C. 分析:完全二叉树和满二叉树都适合顺序存储结构。顺序存储结构(例如数组)对于完全二叉树特别合适,因为它们具有紧密的存储特性,没有空隙。满二叉树是完全二叉树的特例。
D.第i个节点的左孩子不一定存在【坑】

  1. (单选题)
    具有10个叶子结点的二叉树中有()个度为2的结点。
    A. 8
    B. 9
    C. 10
    D. 11
    正确答案: B:9;

解析:n2=n0-1=10-1=9

  1. (单选题)
    设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为()。
    A. h
    B. 2h-1
    C. 2h+1
    D. h+1
    正确答案: B:2h-1;

分析:除根结点层只有1个结点外,其他h-1层均有两个结点,结点总数=2(h-1)+1=2h-1.

  1. (单选题)
    假设一棵二叉树的结点个数为50,,则它的最小高度是( )
    A. 4
    B. 5
    C. 6
    D. 7
    正确答案: C:6;
    在这里插入图片描述

  2. (单选题)
    设二叉树有2n个结点,且m<n,则不可能存在()的结点。
    A.n个度为0
    B.2m个度为0
    C. 2m个度为1
    D.2m个度为2
    正确答案: C:2m个度为1;

解析:
结点总数=2n=n0+n1+n2=n1+2n2+1,则n1=2(n-n2)-1,所以n1为奇数,不可能存在2m个度为1的结点。

  1. (单选题)
    一个具有1025个结点的二叉树的高为()
    A. 11
    B. 10
    C. 11到1025
    D. 10到1024
    正确答案: C:11到1025;
    解析:
    在这里插入图片描述
    二叉树为单支树时具有最大高度,即每层只有一个结点

  2. (单选题)
    设二叉树只有度为0和2的结点,其结点个数为15,则该二叉树的最大深度 为()。
    A. 4
    B. 5
    C. 8
    D. 9
    正确答案: C:8;

解析:
总结点数=1+2(h-1)=15,解得h=8

  1. (单选题)
    在这里插入图片描述
    正确答案: C

解析:
当最后一层只有一个结点时,完全二叉树的结点总数最少。前h-1层是满的,共有 ( (2^(h - 1) - 1 ) 个结点,加上最后一层的一个结点,总数就是 ( (2^(h - 1) - 1 + 1 = 2^(h - 1 ) 个结点。所以,高度为h的完全二叉树最少有 ( 2^(h - 1 ) 个结点1。

  1. (单选题)
    已知一棵完全二叉树的第6层(设根为第1层)有8个叶结点,则完全二叉树的结点个数最少是()。
    A. 39
    B. 52
    C. 111
    D. 119
    正确答案: A:39

解析:
首先,我们知道完全二叉树的定义是除了最后一层外,其他层都是满的。在这个问题中,第6层有8个叶结点,意味着这些叶结点没有子结点。因此,这8个叶结点可能是第6层的唯一结点,也可能是第6层和第7层的结点。
如果这棵树只有6层,那么前5层是满的,第6层有8个叶结点。前5层的结点总数是 (2^5 - 1 = 31),加上第6层的8个叶结点,总数是 (31 + 8 = 39)。

  1. (单选题)
    已知一棵完全二叉树的第6层(设根为第1层)有8个叶结点,则该完全二叉树的结点个数最多是()。
    A. 39
    B. 52
    C. 111
    D. 119
    正确答案: C:111

解析:
接上题:
如果这棵树有7层,那么前6层是满的,第6层有8个没有子结点的结点。前6层的结点总数是 (2^6 - 1 = 63),第7层最多可以有 (2^6 = 64) 个结点,但由于第6层有8个叶结点,所以第7层最多有 (64 - 2 x 8 = 48) 个结点。因此,整棵树最多有 (63 + 48 = 111) 个结点。

  1. (单选题)
    若一棵深度为6的完全二叉树的第6层有3个叶子结点,则该二叉树共有() 个叶子结点。
    A. 17
    B. 18
    C. 19
    D. 20
    正确答案: A:17;

  2. (单选题)
    一棵完全二叉树上有1001个结点,其中叶结点的个数是
    A. 250
    B. 500
    C. 254
    D. 501
    正确答案: D:501;

解析:
在一棵完全二叉树中,如果结点总数为奇数,那么叶结点的个数可以通过以下公式计算:
叶结点个数=(总结点个数+1)/2​
因此,如果一棵完全二叉树有1001个结点,那么叶结点的个数为:
叶结点个数=(1001+1)/2​=1002/2​=501

  1. (单选题)
    若一棵完全二叉树有768个结点,则该二叉树中叶结点的个数是()
    A. 257
    B. 258
    C. 384
    D. 385
    正确答案: C:384;

解析:
在一棵完全二叉树中,叶结点的个数可以通过以下方式计算:
如果二叉树的总结点数为偶数,那么叶结点的个数等于总结点数除以2。
如果二叉树的总结点数为奇数,那么叶结点的个数等于(总结点数+1)除以2。
对于有768个结点的完全二叉树,由于768是偶数,所以叶结点的个数是:
叶结点个数=768/2​=384

  1. (单选题)
    若一棵二叉树有126个结点,在第7层(根结点在第1层)至多有()个结点。
    A. 32
    B. 64
    C. 63
    D.不存在第7层
    正确答案: C:63;

  2. (单选题)
    在这里插入图片描述
    正确答案: A

  3. (单选题)
    已知一棵有2011个结点的树,其叶结点个数是116,该树对应的二叉树中无右孩子的结点个数是()。
    A. 115
    B. 116
    C. 1895
    D. 1896
    正确答案: D:1896;

  4. (单选题)
    在这里插入图片描述
    正确答案: A

解析:
设这棵非空完全二叉树 T 共有 k 个叶结点。由于该二叉树的所有叶结点均位于同一层,并且每个非叶结点都有两个子结点,所以这是一个满二叉树。
在满二叉树中,若叶结点的数量为 k,则非叶结点的数量恰好是 k - 1。这是因为每个非叶结点都有两个子结点,从根结点出发,每增加一个非叶结点就增加两个子结点。
根据满二叉树的性质,总结点数 N 可以表示为叶结点数 k 加上非叶结点数 k - 1:
N=k+(k-1)=2k-1
所以,若 T 有 k 个叶结点,则 T 的结点总数是:
2k-1


chap6 练习2

一. 单选题

  1. (单选题)
    在这里插入图片描述

正确答案: C

  1. (单选题)
    在这里插入图片描述
    正确答案: C

  2. (单选题)
    在这里插入图片描述正确答案: C:;

  3. (单选题)
    在这里插入图片描述
    正确答案: D:;

  4. (单选题)
    在二叉树中有两个结,点m和n,若m是n的祖先,则使用()可以找到从m到n的路径。
    A. 先序遍历
    B. 中序遍历
    C. 后序遍历
    D. 层次遍历
    正确答案: C:后序遍历;

  5. (单选题)
    在二叉树的前序序列、中序序列和后序序列中,所有叶子结点的先后顺序()。
    A. 都不相同
    B. 完全相同
    C. 前序和中序相同,而与后序不同
    D. 中序和后序相同,而与前序不同
    正确答案: B:完全相同;

解析:注意是问 叶子结点的先后顺序,始终左右顺序不变

  1. (单选题)
    对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左、右孩子中,其左孩子的编号小于其右孩子的编号,可采用()次序的遍历实现编号。
    A. 先序遍历
    B. 中序遍历
    C. 后序遍历
    D. 层次遍历
    正确答案: C:后序遍历;

解析:
先序遍历(根-左-右)
根先访问,无法保证孩子节点的编号小于根。
中序遍历(左-根-右)
根在其左右孩子之间访问,无法确保规则要求的每个节点的编号大于其左右孩子的编号。
后序遍历(左-右-根)
左孩子及右孩子均遍历在当前节点之前,符合题目要求的递增规则。
层次遍历(按层顺序)
此方式编号不按先后左右节点间关系,无法确保其职责大小要求。
综上,单个节点从其左右孩子遍历结束后才能确定编号适用性。符合安全关键遍历模式需要仔细层次结构,对基本规定为先左、后右,再为子:C

  1. (单选题)
    前序为A,B,C,后序为C,B,A的二叉树共有()
    A. 1棵
    B. 2棵
    C. 3棵
    D. 4棵
    正确答案: D:4棵;

  2. (单选题)
    一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足()。
    A. 所有的结点均无左孩子
    B.所有的结,点均无右孩子
    C.只有一个叶结点
    D.是任意一棵二叉树
    正确答案: C

  3. (单选题)
    在这里插入图片描述正确答案: C

  4. (单选题)
    在这里插入图片描述

正确答案: C

  1. (单选题)
    给定二叉树如右图所示。设N代表二叉树的根,L代表 根结点的左子树,R代表根结点的右子树。若遍历后的结点序列是 3175624,则其遍历方式是()。
    在这里插入图片描述
    A. LRN
    B. NRL
    C. RLN
    D. RNL
    正确答案: D:RNL;

  2. (单选题)
    若一棵二叉树的前序遍历序列和后序遍历序列分别为1, 2, 3, 4和 4, 3, 2,1,则该二叉树的中序遍历序列不会是()。
    A.1,2, 3, 4
    B. 2,3,4, 1
    C. 3, 2, 4,1
    D. 4, 3, 2, 1
    正确答案: C:3, 2, 4,1;

  3. (单选题)
    若一棵二叉树的前序遍历序列为a,e,b,d,c,后序遍历序列为b, c, d, e, a,则根结点的孩子结点()。
    A. 只有e
    B.只有e,b
    C. 只有e,c
    D. 不能确定
    正确答案: A:只有e;

解析:
为了确定根节点的孩子结点,我们可以根据这些遍历结果分析出树的结构。
先序遍历:
根节点是第一个元素,即 a。
第二个元素是根节点 a 的左子树或者右子树的根节点。
后序遍历:
根节点是最后一个元素,即 a。
倒数第二个元素是根的直接子节点。
通过先序遍历的第二个结点 e,可以确定 e 是 a 的子节点之一:
前序遍历:a [ e, b, d, c ] (其中 [ ] 内是 e 的子树)
后序遍历:[ b, c, d, e ] a (其中 [ ] 内是 e 的子树)
在后序遍历中,e 出现在根节点之前,表示 e 是一个子节点,根据 e 子树的后续遍历结果:
后序遍历:b, c, d, [ e ] a
从先序遍历来看,e 后面是 b,d 和 c 为子节点:
前序遍历:a e [b, d, c]
后序遍历:b c d [e] a
在后序遍历中,b, c, d 出现在e 之前,即 b, d, c 是 e 的子节点。
通过以上分析,可以确定 e 是 a 的唯一直接子节点。b, c, d 是 e 的子节点。
所以根结点 a 的孩子结点是 e。

  1. (单选题)
    下列序列中,不能唯一地确定一棵二叉树的是()
    A.层次序列和中序序列
    B.先序序列和中序序列
    C.后序序列和中序序列
    D.先序序列和后序序列
    正确答案: D:先序序列和后序序列 ;

解析:
A. 层次序列和中序序列
通过层次序列,我们知道每一层的节点顺序,而通过中序序列,我们可以区分左右子树。因此,这两种序列组合可以唯一地确定一棵二叉树。
B. 先序序列和中序序列
先序序列的第一个节点是根节点,通过中序序列,我们可以分辨出根节点的左右子树。所以,这两种序列组合也可以唯一地确定一棵二叉树。
C. 后序序列和中序序列
后序序列的最后一个节点是根节点,通过中序序列,同样可以分辨出根节点的左右子树。因此,这两种序列组合也可以唯一地确定一棵二叉树。
D. 先序序列和后序序列
先序序列的第一个节点是根节点,后序序列的最后一个节点是根节点。然而,仅通过这两个序列,我们无法唯一确定左右子树的结构。例如,存在多种二叉树可能具备相同的先序和后序序列,但结构却不同,特例有如下:

       1
      /
     2
    / 
   31
        \
         2
          \
           3
  1. (单选题)
    已知一棵二叉树的先序遍历结果为ABCDEF,中序遍历结果为CBAEDF,
    则后序遍历的结果为()。
    A. CBEFDA
    B. FEDCBA
    C. CBEDFA
    D.不确定
    正确答案: A:CBEFDA;

解析:
已知:
先序遍历(Preorder):ABCDEF
中序遍历(Inorder):CBAEDF
通过先序遍历的结果,我们知道 A 是根节点。然后在中序遍历中找到 A,A 左边的部分是左子树,A 右边的部分是右子树。
中序遍历分割:
左子树的中序遍历:CB
右子树的中序遍历:EDF
对应的先序遍历分割为:
根节点:A
左子树的先序遍历:BC(对应中序遍历的CB)
右子树的先序遍历:DEF(对应中序遍历的EDF)
接下来对子树进行同样的处理:
左子树(先序:BC,中序:CB)
根节:B
中序遍历的左子树:C
中序遍历的右子树:无
右子树(先序:DEF,中序:EDF)
根节点:D
中序遍历的左子树:E
中序遍历的右子树:F
我们把左子树和右子树都拆解到叶子节点后,可以将树结构复原如下:

    A
   / \
  B   D
 /   / \
C   E   F

根据复原的树结构进行后序遍历(Postorder Traversal),后序遍历顺序为:左子树 -> 右子树 -> 根节点。
于是,可以确定后序遍历结果为:CBEFDA

  1. (单选题)
    要使一棵非空二叉树的先序序列与中序序列相同,其所有非叶结点须 满足的条件是()。
    A. 只有左子树
    B. 只有右子树
    C. 结点的度均为1
    D. 结点的度均为2
    正确答案: B:只有右子树;

  2. (单选题)
    引入线索二叉树的目的是()。
    A. 加快查找结点的前驱或后继的速度
    B. 为了能在二叉树中方便插入和删除
    C. 为了能方便找到双亲
    D. 使二叉树的遍历唯一
    正确答案: A:加快查找结点的前驱或后继的速度;

  3. (单选题)
    在这里插入图片描述
    正确答案: C

解析:
线索二叉树的每个结点有两个指针域,分别指向左孩子和右孩子,每个指针域可能指向其子树中的结点,也可能是一个线索(即指向前驱或后继结点)。
在一个包含 n 个结点的二叉树中,有 n-1 条边(因为一个二叉树若不是空树,则其结点数总是比边数多一个)。在这些边之外,每个结点的左指针或右指针还可以作为线索指向前驱或后继。
由于线索二叉树把所有空的指针(即空指数组成的域)都用来存储线索,每个结点有两个指针域,所以一共有 2n 个指针。这其中共有 n-1 条边连接树的结点,因此剩下的 2n - (n - 1) = n + 1 个指针域用于存储线索。

  1. (单选题)
    在这里插入图片描述
    正确答案: C

解析:
在线索二叉树中,每个结点有两个指针域分别指向左孩子和右孩子,也有两个标志域(ltag和rtag)用来表明相应的指针是指向孩子还是指向线索。具体来说,rtag的含义如下:
若 rtag == 0,表示该结点的右指针指向右孩子结点。
若 rtag == 1,表示该结点的右指针指向线索。
因此,判断线索二叉树中的结点指针 p 是否有右孩子结点,可以通过检查 p->rtag 是否等于 0 来进行。

  1. (单选题)
    一棵左子树为空的二叉树在先序线索化后,其中空的链域的个数是()。
    A. 不确定
    B. 0个
    C. 1个
    D. 2个
    正确答案: D:2个;

解析:
在先序线索化的过程中,对于一棵左子树为空的二叉树,空的链域个数是2个。这是因为:
1.根节点的左线索为空(因为没有前驱)。
2.先序序列的最后一个节点的右线索为空(因为没有后继)。

  1. (单选题)
    若对下图所示的二叉树进行中序线索化,则结点X的 左、右线索指向的结点分别是()
    在这里插入图片描述

A. e,c
B. e,a
C. d,c
D. b,a
正确答案: D:b,a;
解析:

在中序遍历(Inorder Traversal)中,遍历二叉树的顺序为:左子树 -> 根结点 -> 右子树。
对图示二叉树进行中序遍历:
首先遍历 b 的左子树,其根结点为 d,继续遍历 d 的左子树,即节点 e。因此,第一个遍历的是 e。
然后是 d,由于 d 没有右子树,接着遍历 b。
随后遍历 b 的右子树,其根结点为 X,X 没有左子树,因此接下来遍历 X,然后回到根节点 a。
最后遍历 a 的右子树,即 c。
整个中序遍历的顺序为:e -> d -> b -> X -> a -> c
节点 X 的左、右线索分别指向遍历顺序中的前驱和后继节点:
在中序遍历中,X 之前的节点是 b,X 之后的节点是 a。
所以节点 X 的左、右线索指向的结点分别是 b 和 a。


  • 25
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小伍_Five

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值