详解版
笔者整理了本文难点的类似题,点击可跳转
第1关:树和二叉树客观题测试(一)
1、二叉树的深度为k,则二叉树最少有()个结点。
A、
B、
C、2k
D、k
2、某二叉树的中序序列为ABCDEFG,后序序列为BDCAFGE,则其左子树中结点数目为()
A、3
B、4
C、5
D、6
3、设一棵二叉树的中序遍历序列:badce,后序遍历序列:bdeca,则二叉树先序遍历序列为()
A、adbce
B、decab
C、abcde
D、debac
解:
4、树最适合用来表示()。
A、有序数据元素
B、无序数据元素
C、元素之间具有分支层次关系的数据
D、元素之间无联系的数据
5、二叉树是非线性数据结构,所以()。
A、它不能用顺序存储结构存储
B、它不能用链式存储结构存储
C、顺序存储结构和链式存储结构都能存储
D、顺序存储结构和链式存储结构都不能使用
解:二叉树可以使用顺序存储结构和链式存储结构进行存储。顺序存储结构通常使用数组来存储二叉树,这种方式可以方便地实现节点的查找和删除操作,但会浪费一定的空间。链式存储结构使用节点指针链接每个节点,这种方式可以更好地利用空间,但实现查找和删除操作需要遍历二叉树。因此,在具体应用中,需要根据实际需求选择合适的存储方式。
6、将一棵有100个结点的完全二叉树从根这一层开始,每一层上从左到右依次对结点进行编号,根结点的编号为1,则编号为49的结点的左孩子编号为()。
A、99
B、98
C、50
D、48
解:找规律即可。
7、在线索二叉树中,t所指结点没有左子树的充要条件是()。
A、t->left==NULL
B、t->ltag==1
C、t->ltag==1&&t->left==NULL
D、以上都不对
解:线索二叉树是对普通二叉树的改进,通过在每个节点的空子树指针上存储指向该节点的前驱或后继节点的指针,使得在遍历二叉树时可以避免使用栈或递归。在线索二叉树中,t所指结点没有左子树的充要条件是t->ltag == 1,表示该节点的左子树为空。因此,选项B是正确的。
8、把一棵树转换为二叉树后,这棵二叉树的形态是()。
A、唯一的
B、有多种
C、有多种,但根结点都没有左孩子
D、有多种,但根结点都没有右孩子
9、设一棵完全二叉树有700个结点,则共有()个叶子结点。
A、300
B、350
C、550
D、700
解:解:由二叉树的性质可知:n0=n2+1,而n=n0+n1+n2
由上述公式把n2消去得:n=2n0+n1-1,由于完全二叉树中度为1的结点数只有两种可能0或1,
由此得到n0=(n+1)/2或n0=n/2,就可根据完全二叉树的结点总数计算出叶子结点数。
10、中序遍历的递归算法平均空间复杂度为()。
A、O(1)
B、
C、O(ln n)
D、O(n)
解:中序遍历的顺序是:左子树 -> 根节点 -> 右子树。对于二叉树中的每个节点,中序遍历访问一次。因此,中序遍历的时间复杂度也是 O(n)。空间复杂度同样是 O(h)。
第2关:树和二叉树客观题测试(二)
1、用5个权值{3, 2, 4, 5, 1}构造的哈夫曼(Huffman)树的带权路径长度是()。
A、32
B、33
C、34
D、35
解:哈夫曼树是一种最优二叉树,其带权路径长度最短。具体来说,对于给定的n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。
哈夫曼树的构造过程如下:
1. 权值最小的两个结点,构造成一棵二叉树,该二叉树的权值为两个结点之和,并把该二叉树看成结点。
2. 重复步骤1。
在哈夫曼编码中,字符出现次数等同于权值,因此可以使用哈夫曼编码进行数据压缩。
2、对一个满二叉树,m个树叶,n个结点,深度为h,则()。
A、m=h-1
B、h+m=2n
C、
D、n=h+m
3、设给定权值总数有n 个,其哈夫曼树的结点总数为()。
A、2n
B、2n+1
C、2n-1
D、不确定
解:这种题一般可以用极限法,比如咱就给你两个权值,得到的结点数为三。
4、现有按中序遍历二叉树的结果是abc,问有()种不同形态的二叉树可以得到这一遍历结果。
A、5
B、4
C、3
D、2
解:中序遍历结果为"abc"的二叉树有几种不同的形态,可以通过卡特兰数(Catalan number)来计算。卡特兰数是一类常出现在组合数学中的数列,描述了许多问题的解的个数。在这里,我们可以使用卡特兰数来计算给定节点数目的二叉树形态数量。
对于具有n个节点的二叉树,其形态数量为第n个卡特兰数。卡特兰数的递推公式如下:
[C_n = \frac{1}{n+1} \binom{2n}{n} = \frac{(2n)!}{(n+1)!n!}]
其中,(\binom{2n}{n})表示组合数,表示从2n个元素中选择n个的组合数量。
对于这个问题,给定的中序遍历序列为"abc",即有3个节点。所以,形态数量为第3个卡特兰数:
[C_3 = \frac{1}{4} \binom{6}{3} = \frac{6!}{4!3!} = 5]
因此,答案是A、5。
5、具有n(n>0)个结点的完全二叉树的深度为()。
A、
B、
C、
D、
6、若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()。
A、9
B、11
C、13
D、15
7、有关二叉树下列说法正确的是()。
A、一棵二叉树的度可以小于2
B、二叉树的度为2
C、二叉树中至少有一个结点的度为2
D、二叉树中任何一个结点的度都为2
8、利用二叉链表存储树,则根结点的右指针是()。
A、指向最左孩子
B、指向最右孩子
C、非空
D、空
解:二叉链表是树的存储结构的一种,链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点。根无兄弟结点,故d。
9、对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用()次序的遍历实现编号。
A、先序
B、中序
C、后序
D、层次遍历
解:解:由于每个结点的编号大于其左、右孩子的编号,所以先遍历该结点的孩子,再遍历该结点。在一结点的左、右孩子中,其左孩子的编号小于其右孩子的编号,所以先遍历左孩子再遍历右孩子。由此可知,遍历的顺序为:左孩子→右孩子→根结点。可采用后序次序的遍历实现编号。
10、已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为()。
A、CBEFDA
B、FEDCBA
C、CBEDFA
D、不定
第3关:树和二叉树客观题测试(三)
1、已知一棵完全二叉树的第6层(设根为第1层)有6个叶子结点,则该完全二叉树的结点个数最多是()。
A、37
B、51
C、115
D、121
解:由题意可知为6/7层
问结点个数最多→7层
完全二叉数特点:除最后一层为满二叉数,前六层为2^6-1=63,第七层若满为2^6=64。
已知有6个叶子结点(第6层),一结点对应二个子结点2x6=12个
故63+64-12=115个
2、引入二叉线索树的目的是()。
A、为了能在二叉树中方便的进行插入与删除
B、为了能方便的找到双亲
C、加快查找结点的前驱或后继的速度
D、使二叉树的遍历结果唯一
3、若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则x的前驱为()。
A、X的双亲
B、X的右子树中最左的结点
C、X的左子树中最右结点
D、X的左子树中最右叶结点
4、n个结点的线索二叉树上含有的线索数为()。
A、2n
B、n+1
C、n
D、n-1
5、下述编码中哪一个不是前缀码()。
A、(00,01,10,11)
B、(0,10,110,111)
C、(0,1,00,11)
D、(1,01,000,001)
6、n个结点的线索二叉树上含有的线索数为()。
A、n-1
B、n+1
C、n
D、2n
解::用二叉链表法存储包含n个结点的二叉树,结点的指针区域中会有 n+1个空指针。可以用它来存放当前结点的直接前驱和后继等线索,以加快查找速度。这就是线索二叉树的意义和用途。
7、一个具有1025个结点的二叉树的高h为()。
A、10
B、11
C、10至1024之间
D、11至1025之间
8、设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1则T中的叶子数为()。
A、5
B、6
C、7
D、8
解:边k=1x4+2x2+3x1+4x1=15
N =k+1=N0+N1+N2+N3+N4=N0+4+2+1+1=8+N0
N0 = 16 - 8 = 8。
9、n(n≥2)个权值均不相同的字符构成哈夫曼树,关于该树的叙述中,错误的是()。
A、该树不一定是一棵完全二叉树
B、树中有度为0,1,2的结点
C、树中任一非叶子结点的权值一定不小于下一层任一结点的权值
D、树中两个权值最小的结点一定是兄弟结点
10、从下列有关树的叙述中,正确的叙述是()。
A、将一棵树转换成二叉树后,根结点没有左子树。
B、在二叉树中插入结点,该二叉树便不再是二叉树。
C、哈夫曼树是带权路径最短的树,路径上权值较大的结点离根较近。
D、用一维数组存储二叉树时,总是以前序周游存储结点。
第4关:树和二叉树客观题测试(四)
1、设一棵度为m的树有n个结点,则()。
A、树的高度最大是n-m+1
B、树的高度最大是n-m
C、第i层最多有m(i-1)个结点
D、至少在某一层上正好有m个结点
解:若n个结点,其它无要求,则hmax = n。因为度为m,要求他最高,那么就一层度为m,画一下得n - m + 1。
2、按照树的定义,具有3个结点的树有()种形态。
A、2
B、3
C、4
D、5
解:注意,问的是树。树有两种,二叉树有4+1=5种。
3、假定一棵三叉树的结点数为60,则它的最小高度为()。
A、4
B、5
C、6
D、7
4、下面关于树的描述错误的是()。
A、树可以看作是特殊的无向图
B、度为m的树至少有一个度为m的结点,不存在度大于m的结点
C、一棵m叉树就是度等于m的树
D、树中任意两个结点之间的路径是唯一的
解:一棵m叉树是指一个有m个孩子的树,而树的度是指每个节点的最大子节点数。
5、设高度为h的二叉树中只有度为0和度为2的结点,称这种二叉树为正则二叉树,它所包含的结点数最少为 ()。
A、2h
B、2h-1
C、2h+1
D、
6、设一棵二叉树有2n个结点,则不可能存在()的结点。
A、n个度为0
B、偶数个度为0
C、偶数个度为2
D、偶数个度为1
解:2n = N = N0 + N1 + N2 = 2N2 + N1 + 1;由此可得N1必为奇数。
7、一棵高度为h的完全二叉树最多有()个结点。
A、
B、
C、
D、
8、已知一棵完全二叉树的第6层(设根为第1层)有8个叶结点,则该完全二叉树的节点个数最少为()。
A、119
B、111
C、52
D、39
解:由题意可知为6/7层
问结点个数最少→6层
完全二叉数特点:除最后一层为满二叉数,前五层为2^5-1=31
已知有8个叶子结点(第6层),31+8 = 39。
9、在一棵二叉树中有两个结点x和y,在该二叉树的先序遍历序列中x在y之前,在其后序遍历序列中x在y之后,则x和y的关系是()。
A、x是y的左兄弟
B、x是y的右兄弟
C、x是y的子孙
D、x是y的祖先
10、实现二叉树后序遍历的非递归算法,如果不能用栈,那最佳方案采用的存储结构是()。
A、二叉链表
B、广义表
C、三叉链表
D、顺序表
解:实现二叉树后序遍历的非递归算法通常需要使用栈来辅助,因为后序遍历是一个比较复杂的遍历方式,需要先遍历左子树,然后遍历右子树,最后访问根节点。
如果不能使用栈,最佳方案采用的存储结构是三叉链表。在三叉链表中,每个节点包含三个指针:左孩子指针、右孩子指针和父节点指针。这样,在遍历的过程中,可以通过这些指针来跟踪节点的位置,实现后序遍历而不需要额外的栈。
所以,正确答案是:C、三叉链表
第5关:树和二叉树客观题测试(五)
1、二叉树中每个结点的两棵子树的高度差等于1。
A、对
B、错
2、二叉树中每个结点的两棵子树是有序的。
A、对
B、错
3、二叉树用二叉链表作存储结构,则在n个结点的二叉树链表中只有n+1个空指针域。
A、对
B、错
4、二叉树中每个结点至多有两棵非空子树。
A、对
B、错
5、具有12个结点的完全二叉树有5个度为2的结点。
A、对
B、错
6、二叉树的遍历结果不是唯一的。
A、对
B、错
解:因为二叉树的遍历方式有三种:前序遍历、中序遍历和后序遍历。不同的遍历方式会得到不同的结果。例如,对于同一棵二叉树,前序遍历的结果和中序遍历的结果或者后序遍历的结果都不相同。所以,二叉树的遍历结果不是唯一的。
7、对一棵二叉树进行层次遍历时,应借助于一个栈。
A、对
B、错
解:对于层次遍历,应该使用队列这种数据结构。
8、用树的前序遍历和后序遍历可以导出树的中序遍历。
A、对
B、错
9、完全二叉树中,若一个结点没有左孩子,则它必是树叶。
A、对
B、错
10、二叉树中每个结点至多有两个子结点,而对一般树则无此限制.因此,二叉树是树的特殊情形.
A、对
B、错
第6关:树和二叉树客观题测试(六)
1、在二叉树的第i层上至少有
个结点(i>=1)。
A、对
B、错
2、对于有n个结点的二叉树,其高度为
。
A、对
B、错
3、一棵有n个结点的完全二叉树,从上到下,从左到右用自然数依次给予编号,则编号为i的结点的左儿子的编号为2i (2i< n),右儿子是2i+1(2i+1)。
A、对
B、错
4、二叉树中所有结点个数是
,其中k是树的深度。
A、对
B、错
5、不含任何结点的空树是一棵树也是一棵二叉树。
A、对
B、错
6、按照二叉树的定义,具有3个结点的二叉树有5种。
A、对
B、错
7、把一棵树转换为二叉树后,这棵二叉树的形态是不唯一的。
A、对
B、错
8、表达式A*(B+C)/(D-E+F)的后缀表达式是A*B+C/D-E+F。
A、对
B、错
解:以下是前缀、中缀和后缀表达式的知识点表格:
表达式类型 | 运算符位置 | 示例 |
---|---|---|
前缀表达式 | 运算符在前,操作数在后 | ++a |
中缀表达式 | 运算符在中间,操作数在前和后 | a + b |
后缀表达式 | 运算符在后,操作数在前 | a++ |
这些表达式类型在C++中都有不同的使用场景和特点。前缀表达式和后缀表达式通常用于需要改变操作数值的情况,而中缀表达式则更为常见,适用于一般的算术运算和逻辑运算。注意,后缀表达式的计算顺序是在整个表达式计算完毕后才进行增加操作。
给定表达式:A*(B+C)/(D-E+F)
它的后缀表达式是:
- A*(B+C) 的后缀表达式是:ABC+*
- (D-E+F) 的后缀表达式是:DE-F+
- 最终表达式的后缀形式应该是:ABC+*DE-F+/
对比题目提供的后缀表达式 A*B+C/D-E+F,这两个后缀表达式并不相同。
所以,答案是:B、错
9、在一棵具有5层的完全二叉树中结点总数不大于31。
A、对
B、错
10、由二叉树的前序和后序遍历序列能惟一确定这棵二叉树。
A、对
B、错