第四章树
一、选择题(20分)
1.在下述结论中,正确的是: ( )
① 只有2个结点的树的度为1;
② 二叉树的度为2;
③ 二叉树的左右子树可任意交换;
④ 在最大堆(大顶堆)中,从根到任意其它结点的路径上的键值一定是按非递增有序排列的。
A.①④
B.②④
C.①②③
D.②③④
2.已知一棵完全二叉树的第6层(设根为第1层)有8个叶结点,则该完全二叉树的结点个数最多是:( )
A. 39
B. 52
C. 111
D. 119
3.将{28, 15, 42, 18, 22, 5, 40}依次插入初始为空的二叉搜索树。则该树的后序遍历结果是:( )
A.5, 15, 18, 22, 40, 42, 28
B.5, 22, 15, 40, 18, 42, 28
C.28, 22, 18, 42, 40, 15, 5
D.5, 22, 18, 15, 40, 42, 28
4.二叉树的中序遍历也可以循环地完成。给定循环中堆栈的操作序列如下(其中push为入栈,pop为出栈):
push(1), push(2), push(3), pop, push(4), pop, pop, push(5), pop, pop, push(6), pop
以下哪句是对的?( )
A.6是根结点
B.2是4的父结点
C.2和6是兄弟结点
D.以上全不对
5.下列叙述正确的是( )。
A.在任意一棵非空二叉搜索树,删除某结点后又将其插入,则所得二叉搜索树与删除前原二叉搜索树相同。
B.二叉树中除叶结点外, 任一结点X,其左子树根结点 的值小于该结点(X)的值;其右子树根结点的值≥该结点(X)的值,则此二叉树一定是二叉搜索树。
C.虽然给出关键字序列的顺序不一样,但依次生成的二叉搜索树却是一样的。
D.在二叉搜索树中插入一个新结点,总是插入到最下层 ,作为新的叶子结点。
6.将一系列数字顺序一个个插入一棵初始为空的AVL树。下面哪个系列的第一次旋转是“右-左”双旋?( )
A.1,2,3,4,5,6
B.6,5,4,3,2,1
C.4,2,5,6,3,1
D.3,1,4,6,5,2
7.对最小堆(小顶堆){1,3,2,12,6,4,8,15,14,9,7,5,11,13,10} 进行三次删除最小元的操作后,结果序列为:( )
A.4,5,6,7,8,9,10,11,12,13,14,15
B.4,6,5,12,7,10,8,15,14,9,13,11
C.4,6,5,13,7,10,8,15,14,12,9,11
D.4,5,6,12,7,10,8,15,14,13,9,11
8.将 {28, 15, 42, 18, 22, 5, 40} 逐个按顺序插入到初始为空的最小堆(小根堆)中。则该树的前序遍历结果为:( )
A.5, 18, 15, 28, 22, 42, 40
B.5, 15, 18, 22, 28, 42, 40
C.5, 18, 28, 22, 15, 42, 40
D.5, 15, 28, 18, 22, 42, 40
9.设一段文本中包含字符{a, b, c, d, e},其出现频率相应为{3, 2, 5, 1, 1}。则经过哈夫曼编码后,文本所占字节数为:( )
A.25
B.40
C.12
D.36
10.对二叉搜索树进行( )可以得到从小到大的排序序列。
A.前序遍历 B.后序遍历
C.中序遍历 D.层次遍历
二、填空题(20分)
1.一棵二叉树的第i(i>=1)层最多有 个结点;一棵有n(n>0)个结点的满二叉树共有 个叶子结点和 个非叶子结点。
2.在具有n个结点的二叉链表里,共有2n个指针域,其中 个指针域用于指向其左右孩子,剩下的 个指针域则是空的。
3.在下列所示的平衡二叉树中,插入关键字48后得到一棵新平衡二叉树。在新平衡二叉树中,关键字37所在结点的左、右子结点中保存的关键字分别是:
4.将 28, 23, 54, 61, 98, 37 插入一棵初始为空的平衡二叉树(AVL树),然后马上插入下列选项(10,30,60,70)中的一个键值。问:插入键值 将引起 RL 旋转?
5.将 1, 2, 3, 6, 5, 4 顺序一个个插入一棵初始为空的AVL树,会经历 这些 旋转。
6.下列代码的功能是将小顶堆H中指定位置P上的元素的整数键值下调D个单位,然后继续将H调整为小顶堆。
void DecreaseKey( int P, int D, PriorityQueue H )
{
int i, key;
key = H->Elements[P] - D;
for ( i = ; H->Elements[i/2] > key; i/=2 )
;
H->Elements[i] = key;
}
三、(5分)设二叉树的存储结构如下:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
Lchild | 0 | 0 | 2 | 3 | 7 | 5 | 8 | 0 | 10 | 1 |
data | J | H | F | D | B | A | C | E | G | I |
Rchild | 0 | 0 | 0 | 9 | 4 | 0 | 0 | 0 | 0 | 0 |
其中根结点的针值为6(实际为所在数组位置的下标),Lchild,Rchild分别为结点的左、右孩子指针域,data为数据域。
- 画出二叉树的逻辑结构
- 写出该树的前序、中序和后序遍历的序列。
四、(5分)找出分别满足下面条件的所有二叉树:(1)先序序列和中序序列相同;(2)中序序列和后序序列相同;(3)先序序列和后序序列相同;(4)先序、中序和后序序列均相同;(5)先序和后序遍历序列正好相反。
五、(10分)假设用于通信的电文由字符集{a,b,c,d,e,f,g,h}中的字母构成,这8个字母在电文中出现的概率分别为{0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10}
(1)试为这8个字母设计哈夫曼编码。
(2)如果用3位二进制数对这8个字母进行等长编码,则哈夫曼编码的平均码长是等长编码的百分之几?它使电文总长平均压缩多少?
六、(10分)依次把结点(34,23,15,98,115,28,107)插入初始状态为空的平衡二叉排序树,使得在每次插入后保持该树依然是平衡二叉树,请依次画出每次插入后形成的平衡二叉树。
七、(15分)
已知一棵二叉树(如下图所示),其先序序列为:ABDE000F00CG000。设计一个算法(递归迭代均可),按照先序序列创建一棵二叉树。以字符0表示空结点。
八、(15分)假设一个文本使用的字符集为{a,b,c,d,e,f,g},字符的哈夫曼编码依次为{0110,10,110,111,00,0111,010}。假设这些字符在文本中出现的频率分别是{3,35,13,15,20,5,9}。
(1)计算该哈夫曼树的带权路径长度。
(2)设计一个算法(递归迭代均可),要求可以计算哈夫曼树的带权路径长度。