手机扫描二维码答题
00:00:00
第5章-树(1)(常规课)
录音中...
*
1.
如果结点A有3个兄弟,B是A的双亲,则结点B的度是()?
3
4
1
2
A有3个兄弟,说明B有4个孩子(A和3个兄弟),即B的度为4。
*
2.
一棵二叉树高度为h,所有结点的度或为0,或为2,则这棵二叉树最少有()结点。
2h
2h-1
h+1
2h+1
满二叉树的结点数为2^h-1。
*
3.
一棵一般树的结点的前序遍历和后序遍历分别与它相应二叉树的结点前序遍历和后序遍历是一致的。
错
对
一般树和二叉树的遍历顺序不一定一致。
*
4.
设二叉树有n个结点,则其深度为()?
n-1
n
不能确定
log2n下取整+1
二叉树的深度与结构有关,只有结点数无法确定深度。
*
5.
利用二叉链表存储树,则根结点的右指针是()?
空
非空
指向最左孩子
指向最右孩子
二、左孩子-右兄弟表示法简介
在一般树中,每个结点可能有多个孩子。
用二叉链表存储时,每个结点只保留两个指针:
—— 左指针(left):指向该结点的第一个孩子
—— 右指针(right):指向该结点的下一个兄弟
三、根结点的右指针含义
根结点是整棵树的唯一根,它没有兄弟,所以根结点的“右兄弟”指针(即right指针)一定为空。
只有非根结点才可能有右兄弟。
四、推导过程
假设有如下树结构:
A
/ | \
B C D
用左孩子-右兄弟法存储:
A的左指针指向B(第一个孩子),A的右指针为空(没有兄弟)。
B的右指针指向C(B的兄弟),C的右指针指向D(C的兄弟),D的右指针为空。
结论:
根结点A的右指针为空,因为A没有兄弟。
五、总结
用二叉链表存储一般树时,根结点的右指针(right)一定为空。
只有非根结点的right指针才可能指向兄弟结点。
所以,选C,根结点的右指针是空。
树转二叉树时,根结点的右指针为空。
*
6.
下列说法中正确的是():
任何一棵二叉树中每个结点的度都为2
任何一棵二叉树中的度肯定等于2
任何一棵二叉树中至少有一个结点的度为2
任何一棵二叉树中的度可以小于2
二叉树中至少有一个结点的度为2(除特殊情况外)。
*
7.
设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。与森林F对应的二叉树根结点的右子树上的结点个数是()?
M2+M3
M3
M1+M2
M1
森林的定义
森林是若干棵互不相交的树的集合。
转换步骤
(1)在森林中,每棵树的每个结点,只保留它的第一个孩子(如果有),把这个孩子作为该结点的左孩子。
(2)每个结点的“右兄弟”作为该结点的右孩子。
(3)森林中第一棵树的根作为二叉树的根,后面每棵树的根作为前一棵树根的右孩子。
具体操作
对于森林中的每个结点,
—— 只保留它的第一个孩子,作为左孩子。
—— 其余的兄弟,依次作为前一个兄弟的右孩子。
森林中多棵树的根节点,依次用右孩子指针连接起来。
森林转二叉树,右子树包含后面所有树的结点。
*
8.
用链表存储包含n个结点的二叉树,结点的2n个指针区域中有n-1个空指针。
对
错
n个结点的二叉树有n-1条边,因此有n+1个空指针域。
*
9.
由3个结点可以构造出多少种不同的二叉树?()
2
4
3
5
3个结点的不同二叉树种数为5(卡特兰数)。
*
10.
除根结点外,树上每个结点()?
只有一个孩子、一个双亲
可有一个孩子、任意多个双亲
可有任意多个孩子、一个双亲
可有任意多个孩子、任意多个双亲
树的定义中,除根结点外每个结点只有一个双亲,可以有任意多个孩子。
*
11.
一个具有1025个结点的二叉树的高h为()?
11至1025之间
10
10至1024之间
11
二叉树的高度最小为log2(1025)向上取整=11,最大为1025(单链)。
*
12.
后序遍历序列和中序遍历序列能唯一确定一棵二叉树。
错
对
后序和中序遍历可以唯一确定一棵二叉树。
*
13.
完全二叉树一定存在度为1的结点。
错
对
完全二叉树不一定有度为1的结点。
*
14.
二叉树只能用二叉链表表示。
对
错
二叉树可以用顺序存储、链式存储等多种方式表示,不仅限于二叉链表。
*
15.
以下说法错误的是():
树形结构的特点是一个结点可以有多个直接前趋
线性结构中的一个结点至多只有一个直接后继
树形结构可以表达(组织)更复杂的数据
树(及一切树形结构)是一种"分支层次"结构
树形结构的特点是每个结点只有一个直接前趋(双亲),A说法错误。
*
16.
二叉排序树中,最小值结点的()?
左、右指针均为空
左指针一定为空
右指针一定为空
左、右指针均不为空
二叉排序树(Binary Sort Tree),又称
二叉查找树
或
二叉搜索树
,是一种特殊的二叉树结构,其定义基于递归性质:
左子树
:若不空,则所有节点值均小于根节点值
右子树
:若不空,则所有节点值均大于根节点值
二叉排序树最小值结点一定在最左侧,其左指针为空。
*
17.
中序遍历一棵二叉排序树的结点就可得到排好序的结点序列。
对
错
二叉排序树(BST)中序遍历的结果就是从小到大的有序序列。
*
18.
以下说法错误的是()。
已知二叉树的前序遍历和后序遍历序列并不能惟一地确定这棵树,因为不知道树的根结点是哪一个。
在前序遍历二叉树的序列中,任何结点的子树的所有结点都是直接跟在该结点的之后。
哈夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近。
若一个二叉树的树叶是某子树的中序遍历序列中的第一个结点,则它必是该子树的后序遍历序列中的第一个结点。
哈夫曼树的权值较大的结点
A选项错误。哈夫曼树确实是带权路径长度最短的树,但“路径上权值较大的结点离根较近”这句话是错的。哈夫曼树的构造原则是让权值较小的结点离根较远,权值大的结点不一定离根较近。例如,如果有两个权值都很大的结点,它们可能在哈夫曼树的不同分支上,距离根的深度未必小于权值较小结点的深度。哈夫曼树只保证整体带权路径长度最小,而不是单个权值大的结点一定离根近。
B选项正确。对于任意一个二叉树,如果某个叶子结点是某子树的中序遍历序列中的第一个结点,那么它在该子树的后序遍历序列中也一定是第一个结点。因为中序遍历的第一个结点一定是最左下的结点(即左子树最深处的叶子),而后序遍历也是先访问左子树的所有结点,所以这个结点在后序遍历中也最先被访问。
C选项正确。已知一棵二叉树的前序遍历和后序遍历序列,不能唯一确定这棵树。因为如果某些结点只有一个孩子,前序和后序遍历无法区分是左孩子还是右孩子,导致结构不唯一。
D选项正确。在前序遍历序列中,每个结点的子树的所有结点都紧跟在该结点之后出现。因为前序遍历的顺序是“根-左-右”,所以访问完根结点后,立刻访问其左子树和右子树的所有结点。不一定离根较近。
*
19.
一棵完全二叉树上有1001个结点,其中叶子结点的个数是()?
254
505
以上答案都不对
500
250
完全二叉树叶子结点数为(n+1)/2向下取整,(1001+1)/2=501,选E。
*
20.
一棵深度为h(h≥1)的完全二叉树至少有()个结点。
2^(h+1)
2^(h-1)+1
2^h
2^(h-1)
完全二叉树最少结点数为2^(h-1)。
*
21.
设给定权值总数有n个,其哈夫曼树的结点总数为()?
不确定
2n-1
2n+1
2n
哈夫曼树的结点总数为2n-1。
*
22.
已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为()?
FEDCBA
CBEFDA
CBEDFA
不定
根据前序和中序遍历可唯一确定后序遍历,结果为CBEFDA。
*
23.
不使用递归就不能实现二叉树的前序遍历。
对
错
可以用栈等非递归方法实现前序遍历。
*
24.
在下列情况中,可称为二叉树的是()。
哈夫曼树
每个结点至多有两棵子树的树
每个结点只有一棵右子树
每个结点至多有两棵子树的有序树
以上答案都不对
A、每个结点至多有两棵子树的树
错误原因:
“每个结点至多有两棵子树的树”描述的是广义树,不是二叉树。
二叉树的每个结点最多有两个孩子,但这两个孩子必须有“左”和“右”之分,不能只是“有两个子树”而已。
比如:
一个结点有两个孩子,但没有规定哪个是左、哪个是右,这样的结构不是二叉树。
二叉树要求每个结点的两个子树是有序的(左、右),而普通树没有这个要求。
B、哈夫曼树
正确原因:
哈夫曼树是一种特殊的二叉树,满足二叉树的所有定义,并且具有最优带权路径长度的性质。
C、每个结点至多有两棵子树的有序树
错误原因:
“有序树”指的是孩子之间有顺序,但并不等价于二叉树。
有序树的孩子可以有多个,只是有顺序而已。
即使限定“至多有两棵子树”,但没有规定必须是“左、右”两个特定的子树。
二叉树的本质是每个结点有左、右两个指针(即使为空),而不是仅仅有序。
D、每个结点只有一棵右子树
错误原因:
这描述的是一种特殊结构的二叉树(即所有结点只有右孩子,没有左孩子),但这不是一般意义上的“二叉树”定义。
二叉树的定义是每个结点最多有左、右两个子树,而不是只能有右子树。
*
25.
树形结构中元素之间存在一个对多个的关系。
对
错
树形结构的特点是一个结点可以有多个孩子(一个对多个)。
*
26.
若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()?
15
11
不确定
9
设度为0的结点数为x,二叉树结点数=度为2+度为1+度为0=10+5+x,二叉树的结点数=度为1的结点数+2*度为2的结点数+1,解得x=11。
*
27.
n个结点的线索二叉树上含有的线索数为()。
n+1
n
2n
n-1
一、什么是线索二叉树的“线索”?
线索:指的是在二叉树的链式存储结构中,原本为NULL(空)的左、右指针,被用来指向该结点在某种遍历(如中序、先序、后序)下的前驱或后继结点的指针。
这样做的目的是为了方便遍历时能直接找到前驱或后继,提高遍历效率。
二、二叉树的指针域与空指针
n个结点的二叉树,每个结点有2个指针域(左、右),总共2n个指针域。
在一棵普通二叉树中,非空指针域的数量等于树的边数,即n-1(因为n个结点连成一棵树有n-1条边)。
空指针域的数量 = 2n - (n-1) = n+1。
三、线索数的推导
线索二叉树就是把这些空指针域全部用来存放线索(即前驱或后继的指针)。
所以,线索的数量 = 空指针域的数量 = n+1。
公式总结:
总指针域数:2n
非空指针域(实际指向孩子):n-1
空指针域(可用作线索):2n - (n-1) = n+1
在二叉树中,每个结点有2个指针(左、右),n个结点共有2n个指针。其中,非空指针的数量等于树的边数,即n-1(每个结点除根外均有一个父结点,形成n-1条边)。剩余的指针数为2n - (n-1) = n+1,全被用作线索。因此,线索个数为n+1。线索二叉树的线索数为n+1。
*
28.
下面几个符号串编码集合中,不是前缀编码的是()。
{b,c,aa,ac,aba,abb,abc}
{0,10,110,1111}
{00,010,0110,1000}
{11,10,001,101,0001}
前缀编码(Prefix Code)是一种编码方式,满足如下条件:
> 任意一个码字都不是其他码字的前缀。
前缀:如果有两个码字A和B,A是B的前缀,意思是B以A开头。例如A=“10”,B=“101”,则A是B的前缀。
前缀码的好处:解码时不会产生歧义,可以做到“即时译码”,即从左到右扫描编码串,遇到一个合法码字就能立即确定它,不需要回溯。
二、常见的前缀编码
哈夫曼编码就是一种常用的前缀编码。
例如:{0, 10, 110, 1111}
0不是10、110、1111的前缀
10不是110、1111的前缀
110不是1111的前缀
所以这是前缀码
B选项中有前缀关系(10是101的前缀),不是前缀编码。
*
29.
完全二叉树中,若一个结点没有左孩子,则它必是树叶。
错
对
完全二叉树中,若某结点没有左孩子,则它一定没有右孩子,因此它是叶子结点。
*
30.
已知某二叉树的后序遍历序列是dabec, 中序遍历序列是debac , 它的前序遍历是()?
acbed
deabc
decab
cedba
根据后序和中序遍历可以唯一确定前序遍历,具体重建过程可得前序为cedba。
*
31.
一棵含有n个结点的线索二叉树中,其线索个数为()。
n
2n
n-1
n+1
在二叉树中,每个结点有2个指针(左、右),n个结点共有2n个指针。其中,非空指针的数量等于树的边数,即n-1(每个结点除根外均有一个父结点,形成n-1条边)。剩余的指针数为2n - (n-1) = n+1,全被用作线索。因此,线索个数为n+1。
*
32.
将含100个结点的完全二叉树从根这一层开始,每层从左到右依次对结点编号,根结点的编号为1。则编号为49的结点的双亲编号为()?
25
24
无法确定
23
完全二叉树中,编号为i的结点的双亲编号为i/2(向下取整)。49/2=24.5,取整为24。
*
33.
二叉树的第I层上最多含有结点数为()?
2^I-1-1
2^I-1
2^I
2^(I-1)
二叉树第I层最多有2^(I-1)个结点。
*
34.
在完全二叉树中,若一个结点是叶子结点,则它没()。
左子结点和右子结点
左子结点、右子结点和兄弟结点
右子结点
左子结点
完全二叉树的叶结点没有左、右子结点。
*
35.
度为二的树就是二叉树。
错
对
度为二的树不一定是二叉树,二叉树要求每个结点最多有两个孩子,且有左右之分。
*
36.
将一棵树转成二叉树,根结点没有左子树。
错
对
树转二叉树时,根结点的左子树为空。
*
37.
引入二叉线索树的目的是()。
为了能方便的找到双亲
加快查找结点的前驱或后继的速度
为了能在二叉树中方便的进行插入与删除
使二叉树的遍历结果唯一
线索二叉树的主要目的是加快查找前驱或后继。
*
38.
在二叉树的前序遍历序列中,任意一个结点均处在其子女的前面。
对
错
前序遍历是先访问结点再访问子女。
*
39.
在二叉树结点的先序序列、中序序列和后序序列中,所有叶子结点的先后顺序()?
都不相同
完全相同
中序和后序相同,而与先序不同
先序和中序相同,而与后序不同
无论哪种遍历方式,叶子结点的出现顺序是一样的。
*
40.
一棵左右子树均不空的二叉树在先序线索化后,其中空的链域的个数是()。
1
0
不确定
2
一、什么是二叉树的线索化?
线索二叉树:是对普通二叉树的空指针加以利用,把它们用来存放结点在某种遍历下的前驱或后继结点的指针,这样的指针称为“线索”。
先序线索化:是指在先序遍历的基础上,把所有空的左、右指针分别指向该结点在先序遍历下的前驱和后继。
二、题目条件分析
“左右子树均不空的二叉树”
说明每个结点都有左、右孩子,没有叶子结点(度为0的结点),每个结点的左、右指针都指向实际的孩子结点。
三、空链域的来源
普通二叉树中,空链域(即空指针)一般出现在叶子结点的左、右指针上。
但本题说“左右子树均不空”,所以每个结点的左、右指针都不为空,即没有空链域。
四、线索化后空链域的变化
线索化的本质是:
如果某个结点的左指针为空,则用它指向该结点在遍历序列中的前驱;
如果右指针为空,则用它指向后继。
但本题的树本身没有空指针,所以线索化时也没有需要填充的空链域。
五、特殊情况:头结点的前驱
先序线索化时,根结点的前驱是空的,因为根结点在先序遍历中是第一个访问的结点,没有前驱。
这时,根结点的“前驱线索”指针仍然为空。
六、结论
只有根结点的前驱线索为空,其余结点的左右指针都不为空。
所以,空的链域个数为1。
先序线索化后,只有根结点的前驱为空,空链域为1。
*
41.
二叉树中序线索化后,不存在空指针域。
错
对
线索化的概念:
在普通二叉树的链式存储结构中,每个结点有两个指针域(左、右),但实际上只有n-1条边(n为结点数),因此有很多指针域是空的。线索化就是利用这些原本为NULL的指针域,存放指向该结点在某种遍历(如中序、前序、后序)下的前驱或后继结点的指针,这样可以方便遍历时直接找到前驱或后继,提高遍历效率。
中序线索化的具体做法:
对于某个结点,如果它的左指针为空,则将其左指针指向中序遍历时的前驱结点;
如果它的右指针为空,则将其右指针指向中序遍历时的后继结点;
通常还会用一个标志位(如ltag、rtag)来区分该指针是线索还是孩子。
举例说明:
比如有一棵二叉树:
A
/ \
B C
中序遍历顺序是B A C。
B的左指针为空,可以用来指向B的前驱(无),B的右指针为空,可以用来指向B的后继A。
A的左指针指向B(孩子),右指针指向C(孩子)。
C的左指针为空,可以用来指向C的前驱A,右指针为空,可以用来指向C的后继(无)。
题目解析:
“二叉树中序线索化后,不存在空指针域。”这句话是错误的。虽然线索化后大部分原本为NULL的指针被用作线索,但仍然可能存在空指针域,比如整棵树的第一个结点的前驱和最后一个结点的后继,依然没有实际结点可指向,通常仍为NULL。因此,线索化后并不是所有空指针域都被填充,仍然可能存在空指针域。
结论:
中序线索化后,仍然可能存在空指针域,所以题目说“线索化后不存在空指针域”是错误的。
*
42.
满二叉树的叶子结点一定都在最后一层。
错
对
满二叉树的叶子结点都在最后一层。
*
43.
用一维数组存储二叉树时,总是以前序遍历顺序存储结点。
错
对
通常是按层次遍历顺序存储。
*
44.
对于有N个结点的二叉树,其高度为log2n。
错
对
二叉树的高度与结构有关,不一定为log2n。
*
45.
树最适合用来表示()?
无序数据元素
元素之间无联系的数据
有序数据元素
元素之间具有分支层次关系的数据
树结构适合表达分支层次关系的数据。
A、有序数据元素:有序数据元素通常用线性表(如数组、链表)来表示更为合适,因为线性表天然支持顺序访问和操作。
B、无序数据元素:无序数据元素一般用集合、哈希表等结构来表示,树结构并不专门用于无序数据的存储。
D、元素之间无联系的数据:如果数据之间没有任何联系,可以用数组、集合等简单结构存储,无需用树这种复杂的结构。
*
46.
霍夫曼树的结点个数不能是偶数。
错
对
霍夫曼树的结点个数可以是偶数或奇数,具体霍夫曼树的结点总数公式为:
总结点数 = 2n - 1
其中,n 是叶子结点的个数(即原始权值的个数)。
如果 n 是奇数,2n-1 是奇数。
如果 n 是偶数,2n-1 是奇数。取决于权值个数。
*
47.
给定一棵树,可以找到唯一的一棵二叉树与之对应。
对
错
树与二叉树之间有唯一的对应转换方法(孩子-兄弟表示法)。
*
48.
二叉树的遍历只是为了在应用中找到一种线性次序。
对
错
遍历的本质是将树结构线性化。
*
49.
设一棵哈夫曼树中有1999个结点,该哈夫曼树用于对()个字符进行编码。
999
1000
1001
998
哈夫曼树的叶子结点数为(n+1)/2,1999=2*1000-1,所以有1000个字符。
*
50.
一棵有n个结点的二叉树,按层次从上到下,同一层从左到右顺序存储在一维数组A[1..n]中,则二叉树中第i个结点(i从1开始用上述方法编号)的右孩子在数组A中的位置是()。
A[2i](2i<=n)
A[2i+1](2i+1<=n)
A[i-2]
条件不充分,无法确定
顺序存储时,右孩子下标为2i+1。
评价对象得分
字体大小
第5章-树(1)(常规课)
复制