算法与数据结构 第四章 树与二叉树

第四章树

一、选择题(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为数据域。

  1. 画出二叉树的逻辑结构
  2. 写出该树的前序、中序和后序遍历的序列。

四、(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)设计一个算法(递归迭代均可),要求可以计算哈夫曼树的带权路径长度。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值