chap6 练习1
一. 单选题(共18题,100分)
- (单选题)
正确答案: C:在完全二叉树中,若一个结点没有左孩子,则它必是叶结点 ;
答案解析:
A不正确。度为2的有序树可能是二叉树,但也可能不是。二叉树的定义是每个节点最多有两个子树,且子树有顺序,不能颠倒1。
B不完整。含有n个节点的二叉树的高度至少为log2(n+1),这是因为二叉树的高度是从1开始计算的1。
C正确。在完全二叉树中,如果一个节点没有左孩子,则它必是叶结点。因为在完全二叉树中,节点是从上到下、从左到右填充的,所以如果一个节点没有左孩子,那么它也不会有右孩子,因此它是一个叶结点1。
D. 不正确。在二叉排序树中,删除某个节点后再将其插入,得到的二叉排序树可能与原来的不同,因为删除操作可能会改变树的结构,尤其是当删除的节点有两个子节点时。
- (单选题)
以下说法中,正确的是()
A.在完全二叉树中,叶子结点的双亲的左兄弟(若存在)一定不是叶子结点
B.任何一棵二叉树,叶子结点个数为度为2的结点数减1,即
C.完全二叉树不适合顺序存储结构,只有满二叉树适合顺序存储结构
D.结点按完全二叉树层序编号的二叉树中,第i个结点的左孩子的编号为2i
正确答案: A:在完全二叉树中,叶子结点的双亲的左兄弟(若存在)一定不是叶子结点 ;
答案解析:
A. 分析:在完全二叉树中,节点是从上到下、从左到右逐层填充的。因此,如果一个叶子节点的父节点的左兄弟存在,那么该左兄弟一定有子节点(因为节点按层次填满)。因此,叶子节点的父节点的左兄弟不可能是叶子节点。
B. 任何一棵二叉树,叶子结点个数为度为2的结点数+1
C. 分析:完全二叉树和满二叉树都适合顺序存储结构。顺序存储结构(例如数组)对于完全二叉树特别合适,因为它们具有紧密的存储特性,没有空隙。满二叉树是完全二叉树的特例。
D.第i个节点的左孩子不一定存在【坑】
- (单选题)
具有10个叶子结点的二叉树中有()个度为2的结点。
A. 8
B. 9
C. 10
D. 11
正确答案: B:9;
解析:n2=n0-1=10-1=9
- (单选题)
设高度为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.
-
(单选题)
假设一棵二叉树的结点个数为50,,则它的最小高度是( )
A. 4
B. 5
C. 6
D. 7
正确答案: C:6;
-
(单选题)
设二叉树有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的结点。
-
(单选题)
一个具有1025个结点的二叉树的高为()
A. 11
B. 10
C. 11到1025
D. 10到1024
正确答案: C:11到1025;
解析:
二叉树为单支树时具有最大高度,即每层只有一个结点 -
(单选题)
设二叉树只有度为0和2的结点,其结点个数为15,则该二叉树的最大深度 为()。
A. 4
B. 5
C. 8
D. 9
正确答案: C:8;
解析:
总结点数=1+2(h-1)=15,解得h=8
- (单选题)
正确答案: C
解析:
当最后一层只有一个结点时,完全二叉树的结点总数最少。前h-1层是满的,共有 ( (2^(h - 1) - 1 ) 个结点,加上最后一层的一个结点,总数就是 ( (2^(h - 1) - 1 + 1 = 2^(h - 1 ) 个结点。所以,高度为h的完全二叉树最少有 ( 2^(h - 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)。
- (单选题)
已知一棵完全二叉树的第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) 个结点。
-
(单选题)
若一棵深度为6的完全二叉树的第6层有3个叶子结点,则该二叉树共有() 个叶子结点。
A. 17
B. 18
C. 19
D. 20
正确答案: A:17; -
(单选题)
一棵完全二叉树上有1001个结点,其中叶结点的个数是
A. 250
B. 500
C. 254
D. 501
正确答案: D:501;
解析:
在一棵完全二叉树中,如果结点总数为奇数,那么叶结点的个数可以通过以下公式计算:
叶结点个数=(总结点个数+1)/2
因此,如果一棵完全二叉树有1001个结点,那么叶结点的个数为:
叶结点个数=(1001+1)/2=1002/2=501
- (单选题)
若一棵完全二叉树有768个结点,则该二叉树中叶结点的个数是()
A. 257
B. 258
C. 384
D. 385
正确答案: C:384;
解析:
在一棵完全二叉树中,叶结点的个数可以通过以下方式计算:
如果二叉树的总结点数为偶数,那么叶结点的个数等于总结点数除以2。
如果二叉树的总结点数为奇数,那么叶结点的个数等于(总结点数+1)除以2。
对于有768个结点的完全二叉树,由于768是偶数,所以叶结点的个数是:
叶结点个数=768/2=384
-
(单选题)
若一棵二叉树有126个结点,在第7层(根结点在第1层)至多有()个结点。
A. 32
B. 64
C. 63
D.不存在第7层
正确答案: C:63; -
(单选题)
正确答案: A -
(单选题)
已知一棵有2011个结点的树,其叶结点个数是116,该树对应的二叉树中无右孩子的结点个数是()。
A. 115
B. 116
C. 1895
D. 1896
正确答案: D:1896; -
(单选题)
正确答案: A
解析:
设这棵非空完全二叉树 T 共有 k 个叶结点。由于该二叉树的所有叶结点均位于同一层,并且每个非叶结点都有两个子结点,所以这是一个满二叉树。
在满二叉树中,若叶结点的数量为 k,则非叶结点的数量恰好是 k - 1。这是因为每个非叶结点都有两个子结点,从根结点出发,每增加一个非叶结点就增加两个子结点。
根据满二叉树的性质,总结点数 N 可以表示为叶结点数 k 加上非叶结点数 k - 1:
N=k+(k-1)=2k-1
所以,若 T 有 k 个叶结点,则 T 的结点总数是:
2k-1
chap6 练习2
一. 单选题
- (单选题)
正确答案: C
-
(单选题)
正确答案: C -
(单选题)
正确答案: C:;
-
(单选题)
正确答案: D:; -
(单选题)
在二叉树中有两个结,点m和n,若m是n的祖先,则使用()可以找到从m到n的路径。
A. 先序遍历
B. 中序遍历
C. 后序遍历
D. 层次遍历
正确答案: C:后序遍历; -
(单选题)
在二叉树的前序序列、中序序列和后序序列中,所有叶子结点的先后顺序()。
A. 都不相同
B. 完全相同
C. 前序和中序相同,而与后序不同
D. 中序和后序相同,而与前序不同
正确答案: B:完全相同;
解析:注意是问 叶子结点的先后顺序,始终左右顺序不变
- (单选题)
对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左、右孩子中,其左孩子的编号小于其右孩子的编号,可采用()次序的遍历实现编号。
A. 先序遍历
B. 中序遍历
C. 后序遍历
D. 层次遍历
正确答案: C:后序遍历;
解析:
先序遍历(根-左-右):
根先访问,无法保证孩子节点的编号小于根。
中序遍历(左-根-右):
根在其左右孩子之间访问,无法确保规则要求的每个节点的编号大于其左右孩子的编号。
后序遍历(左-右-根):
左孩子及右孩子均遍历在当前节点之前,符合题目要求的递增规则。
层次遍历(按层顺序):
此方式编号不按先后左右节点间关系,无法确保其职责大小要求。
综上,单个节点从其左右孩子遍历结束后才能确定编号适用性。符合安全关键遍历模式需要仔细层次结构,对基本规定为先左、后右,再为子:C
-
(单选题)
前序为A,B,C,后序为C,B,A的二叉树共有()
A. 1棵
B. 2棵
C. 3棵
D. 4棵
正确答案: D:4棵; -
(单选题)
一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足()。
A. 所有的结点均无左孩子
B.所有的结,点均无右孩子
C.只有一个叶结点
D.是任意一棵二叉树
正确答案: C -
(单选题)
正确答案: C
-
(单选题)
正确答案: C
-
(单选题)
给定二叉树如右图所示。设N代表二叉树的根,L代表 根结点的左子树,R代表根结点的右子树。若遍历后的结点序列是 3175624,则其遍历方式是()。
A. LRN
B. NRL
C. RLN
D. RNL
正确答案: D:RNL; -
(单选题)
若一棵二叉树的前序遍历序列和后序遍历序列分别为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; -
(单选题)
若一棵二叉树的前序遍历序列为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。
- (单选题)
下列序列中,不能唯一地确定一棵二叉树的是()
A.层次序列和中序序列
B.先序序列和中序序列
C.后序序列和中序序列
D.先序序列和后序序列
正确答案: D:先序序列和后序序列 ;
解析:
A. 层次序列和中序序列
通过层次序列,我们知道每一层的节点顺序,而通过中序序列,我们可以区分左右子树。因此,这两种序列组合可以唯一地确定一棵二叉树。
B. 先序序列和中序序列
先序序列的第一个节点是根节点,通过中序序列,我们可以分辨出根节点的左右子树。所以,这两种序列组合也可以唯一地确定一棵二叉树。
C. 后序序列和中序序列
后序序列的最后一个节点是根节点,通过中序序列,同样可以分辨出根节点的左右子树。因此,这两种序列组合也可以唯一地确定一棵二叉树。
D. 先序序列和后序序列
先序序列的第一个节点是根节点,后序序列的最后一个节点是根节点。然而,仅通过这两个序列,我们无法唯一确定左右子树的结构。例如,存在多种二叉树可能具备相同的先序和后序序列,但结构却不同,特例有如下:
1
/
2
/
3
和
1
\
2
\
3
- (单选题)
已知一棵二叉树的先序遍历结果为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
-
(单选题)
要使一棵非空二叉树的先序序列与中序序列相同,其所有非叶结点须 满足的条件是()。
A. 只有左子树
B. 只有右子树
C. 结点的度均为1
D. 结点的度均为2
正确答案: B:只有右子树; -
(单选题)
引入线索二叉树的目的是()。
A. 加快查找结点的前驱或后继的速度
B. 为了能在二叉树中方便插入和删除
C. 为了能方便找到双亲
D. 使二叉树的遍历唯一
正确答案: A:加快查找结点的前驱或后继的速度; -
(单选题)
正确答案: C
解析:
线索二叉树的每个结点有两个指针域,分别指向左孩子和右孩子,每个指针域可能指向其子树中的结点,也可能是一个线索(即指向前驱或后继结点)。
在一个包含 n 个结点的二叉树中,有 n-1 条边(因为一个二叉树若不是空树,则其结点数总是比边数多一个)。在这些边之外,每个结点的左指针或右指针还可以作为线索指向前驱或后继。
由于线索二叉树把所有空的指针(即空指数组成的域)都用来存储线索,每个结点有两个指针域,所以一共有 2n 个指针。这其中共有 n-1 条边连接树的结点,因此剩下的 2n - (n - 1) = n + 1 个指针域用于存储线索。
- (单选题)
正确答案: C
解析:
在线索二叉树中,每个结点有两个指针域分别指向左孩子和右孩子,也有两个标志域(ltag和rtag)用来表明相应的指针是指向孩子还是指向线索。具体来说,rtag的含义如下:
若 rtag == 0,表示该结点的右指针指向右孩子结点。
若 rtag == 1,表示该结点的右指针指向线索。
因此,判断线索二叉树中的结点指针 p 是否有右孩子结点,可以通过检查 p->rtag 是否等于 0 来进行。
- (单选题)
一棵左子树为空的二叉树在先序线索化后,其中空的链域的个数是()。
A. 不确定
B. 0个
C. 1个
D. 2个
正确答案: D:2个;
解析:
在先序线索化的过程中,对于一棵左子树为空的二叉树,空的链域个数是2个。这是因为:
1.根节点的左线索为空(因为没有前驱)。
2.先序序列的最后一个节点的右线索为空(因为没有后继)。
- (单选题)
若对下图所示的二叉树进行中序线索化,则结点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。