目录
华文课后题
1、一棵有512个结点的完全二叉树的高度为多少?(独根树高度为1)
解析:
答案: 10
2、请写出下面这棵二叉树的中序遍历
解析:
左-根-右 left-root-right
答案: LXMECKPBQHDA
3、下列关于二叉树性质的说法正确的有:
A、非空满二叉树的结点个数一定为奇数个。
解析:非空满二叉树只有度为0或者度为2两种结点,而这两种结点的个数差为1,所以加起来必为奇数。
n0 = 5个 n2 = 4个 n0 = n2 + 1
B、非完全二叉树也可以用像完全二叉树那样使用顺序存储结构进行存储。
解析:非完全二叉树无法知道每一层哪些位置缺了结点,不能像完全二叉树那样直接计算出两个儿子的编号,所以不能用顺序存储结构存储。
C、当一棵完全二叉树是满二叉树时,叶子结点不一定集中在最下面一层。
解析:只要倒数第二层的度都为0或者2,此棵完全二叉树即为满二叉树,最下面一层不一定要全满
D、完全二叉树最多只有最下面的一层结点度数可以小于2。
解析:倒数第二层也可以有度数为0的结点。
E、一棵非空二叉树的为空的外部结点数等于其结点数加1。
解析:设度为0,1和2的结点数为,
和
,那么为空的外部结点数目等于2
+
=
+
+
+1,于是等于结点数加1。
长方形为扩充的外部结点数 = 15个
圆形为原先的二叉树结点数 = 14个
F、满二叉树的所有结点的度均为2。
解析:结点度数还可以为0。
4、已知一棵树的前序遍历为ABDEGCF,中序遍历为DBGEACF,求这棵树的后序遍历。
解析
答案: DGEBFCA
5、下列关于二叉树遍历的说法正确的有:
A、只有空二叉树和一个根结点的二叉树这两种二叉树的前序和中序遍历的顺序恰好一样。
解析:前序为中左右,而中序为左中右,所有结点都没有左子树后,两者恰好一样。所以所有结点左子树为空的二叉树也满足要求。
B、所有结点左子树为空的二叉树的前序和中序遍历顺序恰好一样。
解析:前序为中左右,而中序为左中右,所有结点都没有左子树后,两者恰好一样。
C、所有结点右子树为空的二叉树的前序和中序遍历顺序恰好一样。
解析: 前序为中左右,而中序为左中右,所有结点都没有右子树后,前序为中左,而中序为左中,两者不同。
D、只有空二叉树和一个根结点的二叉树这两种二叉树的前序和后序遍历的顺序恰好一样。
解析:前序为中左右,而后序为左右中,缺失左子树,前序为中右,而后序为右中;
缺失右子树,前序为中左,而后序为左中,都不一样。(下面的选项同理)
E、所有结点左子树为空的二叉树的前序和后序遍历顺序恰好一样。
解析:前序为中左右,而后序为左右中,所以缺失左子树或者右子树都不能让两者一样。
F、所有结点右子树为空的二叉树的前序和后序遍历顺序恰好一样。
解析:前序为中左右,而后序为左右中,所以缺失左子树或者右子树都不能让两者一样。
G、只有空二叉树和一个根结点的二叉树这两种二叉树的中序和后序遍历的顺序恰好一样。
解析:中序为左中右,而后序为左右中,所有结点都没有右子树后,两者恰好一样。所以所有结点右子树为空的二叉树也满足要求。
H、所有结点左子树为空的二叉树的中序和后序遍历顺序恰好一样。
解析:中序为左中右,而后序为左右中,所有结点都没有右子树后,两者恰好一样。所以所有结点右子树为空的二叉树才满足要求。
I、所有结点右子树为空的二叉树的中序和后序遍历顺序恰好一样。
解析: 中序为左中右,而后序为左右中,所有结点都没有右子树后,两者恰好一样。
J、存在一棵非空二叉树,它的前序、中序和后序遍历都是一样的。
解析:只有一个根结点的二叉树满足要求。
6、下列关于二叉搜索树的说法正确的有
A、二叉搜索树按照中序遍历将各结点打印出将各结点打印出来,将得到按照由小到大的排列。
解析:
B、如果结点χ的左子树有右子树,则存在某个结点的值介于结点χ的值和χ左儿子的值之间,并且这个结点在x的左子树之中。
解析:这样的结点就位于χ的左子树的右子树中。
C、当根结点没有左儿子时,根结点一定是值最小的结点。
解析:右子树中的结点的值都大于根结点,所以根结点的值是最小的。
D、二叉搜索树一定是满二叉树。
解析:不一定。如果对于一个结点存在值比它大的结点,但不存在比它小的,这时它可能就只有一个儿子。
E、二叉搜索树一定是完全二叉树。
解析:不一定。按照从小到大的顺序依次插入一些值(数量超过1个),就可以让二叉搜索树变成一条链,这样显然不是完全二叉树。
F、从根结点一直沿右儿子向下找不一定能找到树中值最大的结点。
解析:右子树中的结点的值都大于根结点,所以根结点的值是最小的。
7、
从空二叉树开始,严格按照二叉搜索树的插入算法(不进行旋转平衡),逐个插入关键码构造出一棵二叉搜索树,以怎样的顺序插入关键码集合{14,32,47,6,9,12,78,63,29,81}可以使得树的深度最小?请依次写出插入到树中的元素,每两个元素之间用一个空格隔开。
解析
通过[]=4可以得到树的最小层数。然后因为需要保证先插入的元素尽可能的小,所以可以使得右子树尽可能的满。构造出这样一棵二叉搜索树后,按照前序遍历可以得出答案。 如果有多组满足要求的方案,请使得你的答案中先插入的元素尽可能的小。
答案: 12 6 9 47 29 14 32 78 63 81
8、下列关于堆的说法正确的有:
A、堆一定是满二叉树。
解析:堆采用完全二叉树实现。
B、最小堆中,最下面一层最靠右的结点一定是权值最大的结点。
解析:不一定。最小堆只保证了每个结点都比它的两个儿子都小,所以它左儿子的值可能比右儿子的大,所以最大的结点不一定靠右。
C、堆是实现优先队列的惟一方法。
解析:堆只是实现优先队列的一种方法。用普通的队列也可以实现优先队列,只是效率比较低。
D、堆一定是完全二叉树。
E、最小堆中,某个结点左子树中最大的结点可能比右子树中最小的结点小。
解析:堆中一个结点的左儿子和右儿子并没有严格的大小关系,所以存在这种情况。
F、使用筛选法建堆要比将元素一个一个插入堆来建堆效率高。
解析:筛选法建堆的时间复杂度为O(n),而一个一个插入建堆时间复杂度为O(nlogn)。其中,n为堆中元素个数。
9、下列关于Huffman树和Huffman编码的说法正确的有:
A、Huffman树一定是满二叉树。
解析:在建立的过程中,每次都选取两棵子树进行合并,所以所有结点要么有两个儿子,要么没有儿子。
B、Huffman编码是一种前缀编码。
解析:Huffman树中,所有需要编码的内容都在叶结点中,所以任何内容的编码都不会是其它内容编码的前缀。
C、Huffman树一定是完全二叉树。
解析:取一棵是完全二叉树的Huffman树翻转过来,这棵树依然是Huffman树,但是已经不再是完全二叉树了。
D、Huffman编码中所有编码都是等长的。
解析:Huffman树的叶结点并不一定在同一层,所以Huffman编码不等长。
E、对于同样的一组权值两两不同的内容可以得到不同的Huffman编码方案。
解析:把某一个结点往左子树编码0,往右子树编码1反过来就可以得到另外一组编码方案。
F、使用频率越高的字母,Huffman编码越长。
解析:频率越高,Huffman编码应该越短,这样才能提高编码效率。
10、请阅读下面一段代码
若此段代码的作用是用来进行前序遍历,那么应该在几号访问点进行访问?(只需要填写数字)
解析
使用深搜算法进行前序遍历,根左右,每达到一个结点就应该进行访问。
答案: 1
11、小库科技笔试题
给予一个二叉树的根节点,验证该树是否是二叉搜索树,在O(n)时间内,用熟悉的语言写出算法。
12 对于如下图所示的最大堆,删除掉最大的元素后,堆的后序遍历结果是
答案: 12 23 24 28 5 37 43 48 3 57 59
参考:优先队列与堆
王道课后题
1
2
3
4
解析:
结点最少的情况,除根结点层只有1个结点外,其他h-1层均有两个结点,结点总数 = 2(h-1)+1 = 2h-1
5
解析:
2(h-1) + 1 = 15,h = 8
6
解析:
7
8
解析:
9
解析:
10(2009年计算机联考真题)
11
解析:
12
解析:
叶子结点数501 = 1001 - 500
13(2011年计算机联考真题)
解析:
14
解析:
15
解析:
n0 = n2 + 1,所以n2 = 123,总结点数 = n0 + n1 + n2 = 247 + n1,n1取0或1
16
解析:
非空指针数 = 所有结点的度数 = 总结点数 - 1
17
解析:
18
解析:
1(高度1) + 3(高度2) + 9 (高度3)+ 27(高度4) + 10(高度5) = 50
19
解析:
举特例
转换成二叉树
仅原来的前115个叶结点有右节点
20
21
解析:
自己举一些特例二叉树来判断
二叉树中序遍历的最后一个结点一定是从根开始沿右走到底的结点。
中序(左根右)遍历的最后一个结点是叶子结点
则其也一定是前序(根左右)遍历的最后一个结点
中序(左根右)遍历的最后一个结点不是叶子结点
其前序(根左右)遍历的最后一个结点在左子树
22
23
解析:
24
25
解析:
26
27
解析:
28
解析:
29
解析:
30
31
32(2009年计算机联考真题)
33
解析:
34(2011年计算机联考真题)
解析:
前序序列与后序序列正好相反,则二叉树只有一个叶子结点。
35(2012年计算机联考真题)
36(2017年计算机联考真题)
解析:
37
解析:
38
解析:
39
解析:
40(2017年计算机联考真题)
41
解析:
42
解析:
二叉树是一种逻辑结构,线索二叉树是加上线索(指针)后的链表结构,是二叉树在计算机内部的一种存储结构,所以是一种物理结构。
43
解析:
44
解析:
45
解析:
46(一头雾水)
解析:
47
48(2010年计算机联考真题)
解析:后序(左右根):dbca
49(一头雾水)
解析:
50 ()的遍历仍需要栈的支持。
解析:
51(2013年计算机联考真题)
解析:
52(2014年计算机联考真题)
解析:
53(2015年计算机联考真题)
解析:
54
解析:
A项:
二叉树:每个结点至多拥有两棵子树(即不存在度大于2的结点)
(或者向下取整再加1)。
n个结点构成完全二叉树时,高度最小;每层一个结点时,高度最大,为n。
C项:高为h的满二叉树对应的森林所含的树的个数一定是h
55
解析:存储森林时,先将森林转换成二叉树(左孩子右兄弟)。
森林只有一棵树,换成二叉树后,根结点的右指针为空。
森林有多棵树,换成二叉树后,根结点的右指针不为空。
56(2009年计算机联考真题)
解析:
57
58
59
60
解析:
61(2011年计算机联考真题)
解析:
62(2014年计算机联考真题)
解析:
63
解析:
64
解析:
二叉树的前序与后序遍历可以唯一确定一棵二叉树。
由前后序序列可知二叉树的形态如下图所示:
对应的森林中有3棵树,根结点分别为A,C,F
65(2016年计算机联考真题)
解析:
n个结点的树有n-1条边。
对于每棵树,其结点数比边数多1。
题中森林中的结点数比边数多10,即共有10棵树。
扩展:
对于图的生成树,若图中顶点数为n,则它的生成树含有n-1条边
66
解析:双亲结点即父结点,只有一个。
好比下图中的5
67
68
69
70
71(2011年计算机联考真题)
72
解析:
73(2013年计算机联考真题)
74
75
76
解析:
(h为平衡二叉树高度,Nh为构造此高度的平衡二叉树所需最少结点数)
N0 = 0
N1 = 1
N2 = 1 + 1 + 0 = 2
N3 = 1 + 2 + 1 = 4
N4 = 1 + 4 + 2 = 7
N5 = 1 + 7 + 4 = 12
N6 = 1 +12 + 7 = 20
77
解析:解法参考上题
78(2009年计算机联考真题)
解析:
平衡因子 = 节点的左子树高度 - 右子树高度
AVL树就是其中所有节点的平衡因子不超过1也不小于-1
即任意结点的左右子树高度差的绝对值不超过1
79(2010年计算机联考真题)
解析:
80(2012年计算机联考真题)
解析:
81(2013年计算机联考真题)
解析:
平衡因子为0的分支结点:2, 4, 6
82
解析:
哈夫曼树只有度为0和2的结点。非空二叉树:n0 = n2 +1。
83(2010年计算机联考真题)
解析:
哈夫曼树为带权路径最小的二叉树,不一定是完全二叉树。
84
解析:
85
解析:前缀编码的定义:在一个字符集中,任何一个字符的编码都不是另一个字符编码的前缀
86(2014年计算机联考真题)
解析:前缀编码的定义:在一个字符集中,任何一个字符的编码都不是另一个字符编码的前缀。
D中110是1100的前缀
87
解析:
哈夫曼编码中,一个编码不能是任何其他编码的前缀。
3位编码为001时,对应的四位为0000和0001
3位编码为000时,对应的四位为0010和0011
若哈夫曼编码的长度只允许小于等于4,则哈夫曼树的高度最高为5。已知1和01,可构造出哈夫曼树:
88
解析:
本质上是求哈夫曼树中叶子结点的个数。
n = n0 + n2 = n0 + n0 -1 = 2n0 - 1
89 对于哈夫曼树说法错误的是:
90
解析:
度为m的树,说明树中任一结点的度数最多为m。
度为m的哈夫曼树只有度为0和度为m的结点。
设度为m的结点有x个,设结点总数为N。
N = x + n
N = 总度数 + 1 = m*x + 1
x + n = m*x + 1,解出x
91(2015年计算机联考真题)
解析:
92(2015年计算机联考真题)
解析:
93(2017年计算机联考真题)
解析:0100(a) 011(f) 001(e) 001(e) 011(f) 11(g) 0101(d)