1、对以下算法功能最准确的描述是()。
int fun1(BTreeNode *BT, ElemType e){ int n1, n2; if (BT==NULL) return 0; if (BT->data==e) return 1;//递归出口 n1 = fun1(BT->left, e);//递归过程 if (n1>=1) return n1+1; n2 = fun1(BT->right, e);//递归过程 if (n2>=1) return n2+1; return 0; }
A.判断二叉树根结点值是否为e
B.判断二叉树是否存在值为e结点
C.求二叉树中值为e结点的层次
D.求二叉树值为e的结点的个数
C
2、二叉树的形态
由 3 个结点可以构造出 ▁▁▁▁▁ 种不同形态的二叉树。
A.2
B.3
C.4
D.5
D
由n个结点可以构造出C(2n, n) / (n + 1)种不同形态的二叉树。
卡特兰数的通项为C(2n, n) / (n + 1)。
3、完全二叉树的叶子结点数
一棵有 1001 个结点的完全二叉树,其叶子结点数为 ▁▁▁▁▁ 。
A.250
B.254
C.500
D.501
D
完全二叉树有如下性质:n=n0+n1+n2,n0=n2+1(叶子结点数等于度为2的结点数加1)
n:结点总数
n0:度为0的结点个数,也就是叶子结点
n1:度为1的结点个数,在完全二叉树中值有0和1这两种情况(n1=0或1)
n2:度为2的结点个数
度为1的结点数为:
n为偶数:1
n为奇数:0
1001=n0+0+n0-1
n0=501
4、二叉树的高度
若根节点为高度1,一棵具有 1025 个结点的二叉树的高度为 ▁▁▁▁▁ 。
A.10
B.11
C.11~1025 之间
D.10~1024 之间
C、
若二叉树每层只有一个结点(单链表),则高度为1025
若二叉树为完全二叉树(高度为n
,最多有2ⁿ-1
个结点(n≥1
),第i
层,最多有2ⁿ-1
个结点)
2ⁿ-1=1025 ( 2^10 - 1 < 1025 < 2^11 - 1 ),n=11
则该二叉树的高度为11~1025之间。
5、已知某二叉树的后序遍历序列是dabec
, 中序遍历序列是debac
, 它的前序遍历是( )。
A.acbed
B.decab
C.deabc
D.cedba
D
前序遍历:根左右
中序遍历:左根右debac
后序遍历:左右根dabec
①根据后序序列确定二叉树的根结点
②根据根结点在中序序列中划分出二叉树的左、右子树包含哪些结点。
然后根据左右子树结点在后序序列中的次序确定子树的根结点,即回到步骤①
③如此重复上述步骤,直到每棵子树仅有一个结点为止
第一层:根结点为c,左子树包含deba
,没有右结点。
第二层:根结点为e,左结点为d,右子树包含ba
第三层:根结点为b,没有左结点,右结点为a
1 c
2 e
3 d b
4 a
6、对于任意一棵高度为 5 且有 10 个结点的二叉树,若采用顺序存储结构保存,每个结点占 1 个存储单元(仅存放结点的数据信息),则存放该二叉树需要的存储单元的数量至少是:
A.31
B.16
C.15
D.10
A
2^5 - 1 = 31
7、已知森林 F 及与之对应的二叉树 T,若 F 的先根遍历序列是 a, b, c, d, e, f,后根遍历序列是 b, a, d, f, e, c,则 T 的后序遍历序列是:
A.b, a, d, f, e, c
B.b, d, f, e, c, a
C.b, f, e, d, c, a
D.f, e, d, c, b, a
C
前序遍历:根左右 a, b c, d, e, f
中序遍历:左根右
后序遍历:左右根 b, a d, f, e, c
易知F中存在两棵二叉树,分别包括ab
结点和cdef
结点
F
1 a c
2 b d e
3 f
T
1 a
2 b c
3 d
4 e
5 f
8、一棵二叉树中有7个度为2的结点和5个度为1的结点,其总共有( )个结点。
A.16
B.18
C.20
D.30
C
n=n0+n1+n2
n0=n2+1
n=8+5+7=20
9、用二叉链表表示具有n个结点的二叉树时,值为空的指针域的个数为( )
A.n-1
B.n
C.n+l
D.2n
C
n个结点的二叉链表中,有2n个链域,每一条非空链域对应一条树枝,而树枝的个数为n-1,
因此,空节点个数为2n-(n-1)=n+1。
10、某森林 F 对应的二叉树为 T,若 T 的先序遍历序列是 a, b, d, c, e, g, f,中序遍历序列是 b, d, a, e, g, c, f,则 F 中的树的棵树是:
A.1
B.2
C.3
D.4
C
前序遍历:根左右 a, b, d, c, e, g, f
中序遍历:左根右 b, d, a, e, g, c, f
后序遍历:左右根
第一层:根结点为a,左子树包含bd
结点,右子树包含egcf
结点
第二层:a的左子树的根结点为b,无左结点,右结点为d
a的右子树的根结点为c,左子树包含eg
结点,右结点为f
第三层:根结点为e,无左结点,右结点为g
T
1 a
2 b c
3 d e f
4 g
F
1 a c f
2 b e
3 d g
转换为森林,包含3棵树,根结点分别为a,c,f。
11、若某二叉树有 5 个叶结点,其权值分别为 10、12、16、21、30,则其最小的带权路径长度(WPL)是:
A.89
B.200
C.208
D.289
B
合并最小的两个叶结点10、12→22:{ 16、21、22、30 }
合并最小的两个叶结点16、21→37:{ 22、30、37 }
合并最小的两个叶结点22、30→52:{ 37、52 }
合并最小的两个叶结点37、52→89:{ 89 }
1 89
2 37 52
3 16 21 22 30
4 10 12
16×2+21×2+10×3+12×3+30×2=200
32+42+30+36+60=200
12、给二叉树的结点编号
对一棵二叉树的结点从 1 开始顺序编号。要求每个结点的编号小于其左、右孩子的编号,且左孩子的编号小于右孩子的编号。可采用 ▁▁▁▁▁ 实现编号。
A.先序遍历
B.后序遍历
C.中序遍历
D.层次遍历
A
根<左<右→根左右→前序遍历
13、若将一棵树 T 转化为对应的二叉树 BT,则下列对 BT 的遍历中,其遍历序列与 T 的后根遍历序列相同的是:
A.先序遍历
B.中序遍历
C.后序遍历
D.按层遍历
B
树、森林、二叉树的遍历对应关系
树 | 森林 | 二叉树 |
---|---|---|
先序遍历 | 先序遍历 | 先序遍历 |
后序遍历 | 中序遍历 | 中序遍历 |
14、设 T 是非空二叉树,若 T 的先序遍历和中序遍历序列相同,则 T 的形态是 __
A.只有一个根结点
B.没有度为 1 的结点
C.所有结点只有左孩子
D.所有结点只有右孩子
D
前序遍历:根左右
中序遍历:左根右
所有结点只有右孩子(所有结点没有左孩子)
15、设 T 是非空二叉树,若 T 的后序遍历和中序遍历序列相同,则 T 的形态是 __
A.只有一个根结点
B.没有度为 1 的结点
C.所有结点只有左孩子
D.所有结点只有右孩子
C
中序遍历:左根右
后序遍历:左右根
所有结点只有左孩子(所有结点没有右孩子)
16、利用二叉链表存储树,则根结点的右指针是( )。
A.指向最左孩子
B.指向最右孩子
C.空
D.非空
D
树转换为二叉树:(二叉链表)
1、孩子节点放在左子树
2、兄弟节点放在右子树
因为根没有兄弟节点,所以根节点没有右子树,即根结点的右指针为空。
17、设一段文本中包含字符{a, b, c, d, e},其出现频率相应为{3, 2, 5, 1, 1}。则经过哈夫曼编码后,文本所占字节数为:
A.40
B.36
C.25
D.12
C
1 12
2 5 7
3 3 4
4 2 2
5 1 1
5×1+3×2+1×4+1×4+2×3=25
5+6+4+4+6=25
18、已知字符集{ a, b, c, d, e, f, g, h }。若各字符的哈夫曼编码依次是 0100, 10, 0000, 0101, 001, 011, 11, 0001,则编码序列 0100011001001011110101 的译码结果是:
A.acgabfh
B.adbagbb
C.afbeagd
D.afeefgd
D
0100 011 001 001 011 11 0101
1 ?
2 ? ?
3 ? ? b g
4 ? e ? f
5 c h a d
19、已知字符集{ a, b, c, d, e, f },若各字符出现的次数分别为{ 6, 3, 8, 2, 10, 4 },则对应字符集中各字符的哈夫曼编码可能是:
A.00, 1011, 01, 1010, 11, 100
B.00, 100, 110, 000, 0010, 01
C.10, 1011, 11, 0011, 00, 010
D.0011, 10, 11, 0010, 01, 000
A
2+3=5 { 4, 5, 6, 8, 10 }
4+5=9 { 6, 8, 9, 10 }
6+8=14 { 9, 10, 14 }
9+10=19 { 14, 19 }
14+19=33 { 33 }
1 33
2 14 19
3 6 a 8 c 9 10 e
4 4 f 5
5 2 d 3 b
a:00
b:1011
c:01
d:1010
e:11
f:100
20、对 n 个互不相同的符号进行哈夫曼编码。若生成的哈夫曼树共有 115 个结点,则 n 的值是:
A.56
B.57
C.58
D.60
C
哈夫曼树(结点个数为奇数)中度为1的结点为0(n1=0)
n=n0+n1+n2
n0=n2+1
115=n0+0+n0-1
n0=58
即叶子结点数为58,n=58。
21、已知一棵完全二叉树的第6层(设根为第1层)有8个叶结点,则该完全二叉树的结点个数最多是:
A.39
B.52
C.111
D.119
C
第六层有2^5=32个结点,度为2的结点共有32-8=24个,则第七层最多有24×2=48个结点
第一层到第六层共有2^6-1=63个结点
则该完全二叉树的结点个数最多为63+48=111个
22、在一个用数组表示的完全二叉树中,如果根结点下标为1,那么下标为17和19这两个结点的最近公共祖先结点在哪里(数组下标)? (注:两个结点的“公共祖先结点”是指同时都是这两个结点祖先的结点)
A.8
B.4
C.2
D.1
B
2i+1=17 2j+1=19
i=8 j=9
2a=8 2b+1=9
a=b=4
23、具有65个结点的完全二叉树其深度为(根的深度为1):
A.8
B.7
C.6
D.5
B
2^6- 1 < 65 < 2^7 - 1
n=7
24、设一棵非空完全二叉树 T 的所有叶节点均位于同一层,且每个非叶结点都有 2 个子结点。若 T 有 k 个叶结点,则 T 的结点总数是:
A.2k−1
B.2k
C.k^2
D.2^k−1
A
非叶子结点都有两个子节点,n1=0
n=n0+n1+n2
n0=n2+1
n=k+0+k-1=2k-1
25、设森林F中有三棵树,第一、第二、第三棵树的结点个数分别为M1,M2和M3。则与森林F对应的二叉树根结点的右子树上的结点个数是:
A.M1
B.M1+M2
C.M2+M3
D.M3
C
森林转化为二叉树
①首先将森林中所有的普通树各自转化为二叉树
②将森林中第一棵树的树根作为整个森林的树根,其他树的根节点看作是第一棵树根节点的兄弟节点,
采用孩子兄弟表示法将所有树进行连接
第一棵树的根结点作为二叉树的根结点,
第一棵树的左子树作为二叉树的左子树,
其余的两棵树作为二叉树的右子树,
则森林对应的二叉树的右子树上的结点个数为其余的两棵树的结点个数之和,即M2+M3。
26、将下列由三棵树组成的森林转换为二叉树,正确的结果是( )。
A.
B.
C.
D.
A
27、若二叉搜索树是有N个结点的完全二叉树,则不正确的说法是:
A.所有结点的平均查找效率是O(logN)
B.最小值一定在叶结点上
C.最大值一定在叶结点上
D.中位值结点在根结点或根的左子树上
C
二叉搜索树:左 < 根 < 右(若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值)
若没有右结点,则最大值在根结点上。
28、将{ 32, 2, 15, 65, 28, 10 }依次插入初始为空的二叉搜索树。则该树的前序遍历结果是:
A.2, 10, 15, 28, 32, 65
B.32, 2, 10, 15, 28, 65
C.10, 28, 15, 2, 65, 32
D.32, 2, 15, 10, 28, 65
D
二叉搜索树:左 < 根 < 右(若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值)
1 32
2 2 65
3 15
4 10 28
29、已知二叉排序树如下图所示,元素之间应满足的大小关系是:
A.x1<x2<x5
B.x1<x4<x5
C.x3<x5<x4
D.x4<x3<x5
C
二叉搜索树:左 < 根 < 右(若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值)
x1<x2,x3,x4,x5
x3<x2
x3<x4,x5
x5<x4
30、下列给定的关键字输入序列中,不能生成如下二叉排序树的是:
A.4, 5, 2, 1, 3
B.4, 5, 1, 2, 3
C.4, 2, 5, 3, 1
D.4, 2, 1, 3, 5
B
二叉搜索树:左 < 根 < 右(若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值)
B.4, 5, 1, 2, 3
1 4
2 1 5
3 2文章来源:https://www.toymoban.com/news/detail-775565.html
4 3文章来源地址https://www.toymoban.com/news/detail-775565.html
到了这里,关于数据结构与算法--二叉树与树(单选题含题解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!