数据结构--树

冒泡排序的思想

冒泡思想:

第十一章 2.

通过无序区中相邻记录的关键字间的比较和位置的交换,使关键字最小的记录像气泡一样逐渐向上漂至水面。整个算法是从最下面的记录开始,对每两个相邻的关键字进行比较,把关键字较小的记录放到关键字较大的记录的上面,经过一趟排序后,关键字最小的记录到达最上面,接着再在剩下的记录中找关键字次小的记录,把它放在第二个位置上,依次类推,一直到所有记录有序为止。

复杂度:时间复杂度为 O(n2),空间复杂度为 O(1)

// An highlighted block
def bubble_sort(alist):
    for j in range(len(alist)-1,0,-1):
        # print(j)
        for i in range(j):
            print(i)
            if alist[i] > alist[i+1]:
                alist[i],alist[i+1]=alist[i+1],alist[i]

li = [54,26,93,17,77,32]
bubble_sort(li)
print(li)

----2020/3/16

----二叉查找树的查找效率与二叉树的树型有关,在()时其查找效率最低
正确答案: C
结点太多
完全二叉树
是单枝树
节点太复杂
解析:当二叉查询树变成一条链表效率最差。所以有AVL平衡树 限制节点深度差不超过1,避免产生链表一般的树。

----设有关键字n=2h -1,构成二叉排序树,每个关键字查找的概率相等,查找成功的ASL最大是n()
正确答案: B


解析:什么是ASL?平均查找长度。

----2020/3/17

----若一棵二叉树的先序和中序序列分别是abfcde和bfadce,则其后序序列是()

正确答案: C
bfdeac
fbedca
fbdeca
dbefca

解析:先序:根左右 abfcde 得出a为根节点
中序:左根右 bfadce 根节点a的左部分bf,右部分为cde,以此类推继续递归分析……得出如下图在这里插入图片描述
后序:左右根 fbdeca

----完全二叉树共有700结点,该二叉树有多少个叶子结点?
正确答案: B
349
350
351
352
353

解析:完全二叉树
度为0的节点(叶节点)个数为n0,度为1节点n1=0或1(完全二叉树特点,区别满二叉树),度为2节点n2
n2=n0-1
n0+n2=700
则n1=1,n0=350

----设一棵三叉树中有 2 个度数为 1 的结点, 2 个度数为 2 的结点, 2 个度数为 3 的结点,则该三叉链权中有( )个度数为 0 的结点。
正确答案: C
5
6
7
8
解析:三叉树结点的度数均不大于3,结点总数应等于i度结点数(记为ni)和:N=n0+n1+n2+n3
(1) 二:i度结点有i个孩子,根结点不是任何结点的孩子,结点总数为:N=n1+2n2+3n3+1
(2)1、2得到:n0=n2+2n3+1=2+2*2+1=7

----若把堆看成是一棵完全二叉树,则该树一定是一棵二叉排序树()
正确答案: B


解析:堆对于左右子树的大小关系没有要求,而二叉排序树有要求。

----最佳二叉树是AVL 树(平衡二叉树)。()
正确答案: B
正确
错误
解析:最佳二叉树指的是哈夫曼树,但是哈夫曼树不一定就是平衡二叉树,哈夫曼树指的是最短加权路径最短。

----2020/3/18

----从二叉搜索树中查找一个元素时,其时间复杂度大致为( )。
正确答案: C
O(n)
O(1)
O(log2n)
O(n2)

解析:平均查找长度 O(Logan) 最差为O(n)

----已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历是()
正确答案: D
acbed
decab
deabc
cedba

解析:在这里插入图片描述

----某段文本中各个字母出现的频率分别是{a:4,b:3,o:12,h:7,i:10},使用哈弗曼编码,则哪种是可能的编码?
正确答案: A
a(001)b(000)h(01)i(10)o(11)
a(0000)b(0001)h(001)o(01)i(1)
a(000)b(001)h(01)i(10)o(00)
a(0000)b(0001)h(001)o(000)i(1)

解析:1. 频次越高,编码越短
2. 不能出现两个编码有相同的前缀

----当向二叉排序树中插入一个结点,则该结点一定成为叶子结点。( )
正确答案: A
正确
错误
解析:题目说的是二叉排序树,插入在叶子结点,不需要调整。而AVL树才需要调整,此时不一定是叶子结点。

----非空的二叉树一定满足:某结点若有左孩子,则其中序前驱一定没有右孩子()
正确答案: A


解析:。。。。
如下图所示:左图中前驱无右孩子中序为:BA 若前驱有右孩子中序为:BCA 因此A的前驱发生了变化,其前驱没有右孩子在这里插入图片描述

—2020/3/20

—树形结构中元素之间存在一对多的关系()
正确答案: A


解析:树形结构元素之间存在一对多的关系,线性结构元素之间存在一对一的关系,图形结构元素之间存在多对多的关系。

—一棵完全二叉树第六层有9个叶结点(根为第一层),则结点个数最多有()
正确答案: D
112
111
107
109
解析:这个题目第六层有9个叶结点,问最多有多少个结点,那我们可以想到可以有第7层,但是第7层少了18个结点,那么第六层就剩下9个叶子节点所以答案为:1+2+4+8+16+32+64-18=109

—设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。与森林F对应的二叉树根结点的右子树上的结点个数是( )。
正确答案: D
M1
M1+M2
M3
M2+M3
解析:
根据森林转换为二叉树的法则,二叉树的根结点通常是第一棵树的结点,二叉树的左子树是由第一棵树删去根后所得所有子树构成的,二叉树的右子树是由其它树(第二,第三棵树)构成的,故左子树结点个数是M1-1,右子树上的结点个数是M2+M3。

----设二叉排序树由(54,28,16,34,73,62,95,60,26,43)构成如下图二叉树,则在该树中查找任意指定元素的平均查找长度为( )
在这里插入图片描述
正确答案: B
1.2
2.9
4.1
5.4
解析:(1+2 * 2+3 * 4+4*3)/10=2.9

----设二叉树中的结点总数为49,若用二叉链表作为存储结构,则该二叉树中总共有多少个空指针域()
正确答案: C
51
52
50
49
解析:一共有 n个节点。那么每一个节点都有两个域,共有2n个。一共有多少个分支呢?每一个节点都有父节点(除了根节点)那么就会有n-1个分支。那么空指针的域就是2n - (n-1) = n+1;那么就会有n+1个空指针域。也就是50个。不管是不是满二叉树,这个结论都是正确的。

----所谓赋权无向图G的最小生成树T,就是将G中各结点间的最短路径作为边而构造出的G的子图()
正确答案: B


解析:错。最小生成树算法是逐次取最短的路径连通未连接节点和“已连接节点集合”。

----题目来源于王道论坛
先序序列为a,b,c,d的不同二叉树的个数是 。

正确答案: B
13
14
15
16
解析:组合(n,2n)=(2n)!/(n!*(2n-n)!)

----顺序存储结构既适合于完全二叉树,也同样适合于一般的二叉树,这种说法()
正确答案: A
正确
错误
解析:完全二叉树和满二叉树更适合顺序存储结构;一般二叉树都采用链式存储结构。

----已知一棵二叉树的前序遍历为CABEFDHG,中序遍历为BAFECHDG,那么它的后续遍历是:
正确答案: B
BFEACHDG
BFEAHGDC
BEFACHDG
BEFAHGDC
解析:在这里插入图片描述

----下图为一个二叉树,请选出以下不是遍历二叉树产生的顺序序列的选项
在这里插入图片描述
正确答案: B D
ABCDEFIGJH
BDCAIJGHFE
BDCAIFJGHE
DCBJHGIFEA
解析:先序遍历结果为:ABCDEFIGJH
中序遍历结果为: BDCAIFJGHE
后序遍历结果为:DCBIJHGFEA

----2020/4/23

----最佳二叉树是AVL 树(平衡二叉树)。()
正确答案: B
正确
错误

解析:最佳二叉树指的是哈夫曼树,但是哈夫曼树不一定就是平衡二叉树,哈夫曼树指的是最短加权路径最短。

----2020/5/11

----如果我们定义满二叉树为树的每一层节点都被填满的二叉树叫满二叉树, 那么满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。( )
正确答案: A
正确
错误

解析:满二叉树的要求比较严格,底层的结点必须填满。而完全二叉树要求松,右下角几个结点可以缺失。
完全二叉树两个最大的特点:叶子结点只在最下2层出现。如果有度为1的结点,一定只有左结点,没有右结点。

----判断下列说法是否正确:一棵深度为k的平衡二叉树,其每个非终端结点的平衡因子均为0,则该树共有2k-1个结点。()
正确答案: A

正确
错误
解析:题干两点条件:
平衡二叉树
非终端结点平衡因子为0 (左右子树高度相等)
一棵深度为k的平衡二叉树。因此,这样的平衡二叉树即为满二叉树,而高度为k的满二叉树的结点数是2k-1。

----树的父链表示法其实就是用数组表示树的存储结构()
正确答案: A

解析:双亲表示法在这里插入图片描述

----一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足?
正确答案: C

所有的结点均无左孩子
所有的结点均无右孩子
只有一个叶子结点
是一棵满二叉树

解析:之所以不能选AB,是因为题目中只交代了非空,
而如果该二叉树只有根节点,即满足了AB条件,
而显然此状态下,三种遍历顺序的结果都相同。
因此我们只能选择C
先序:根->左->右
后序:左->右->根
只有两个节点是,可以省略为:
先序:根->孩子
后序:孩子->根
因此选C

----某二叉树共有4个结点,前序(先根序)遍历该二叉树的4个结点并记录各结点取值,得到的结果是“abcd”。那么,该二叉树有多少种可能的拓扑结构?()

正确答案: A
14
16
10
12
解析:
2个点有2种(根有左儿子或者根有右儿子)
3个点有5种(左边2个结点或者右边2个结点或者左右各一结点, 2+2+1=5)
4个点有14种(左边3个结点或者右边3个结点或者左1右2或者左2右1 , 5+5+2+2=14)
5个点有42种(左4或右4或左3右1或左1右3或左2右2, 14+14+5+5+2*2=42)
公式:1/(n+1)*C(2n,n) = (2n)!/((n+1)!*n!)

----题目来源于王道论坛
B+树不同于B树的特点之一是 。

正确答案: A
能支持顺序查找
结点中含有关键字
根结点至少有两个分支
所有叶结点都在同一层上

解析:由于B+树的所有叶结点中包含了全部的关键字信息,且叶结点本身依关键字从小到大顺序链接,可以进行顺序查找,而B树不支持顺序查找(只支持多路查找)。

----题目来源于王道论坛
下列叙述中,不符合m阶B树定义要求的是()。

正确答案: D
根结点最多有m棵子树
所有叶结点都在同一层上
各结点内关键字均升序或降序排列
叶结点之间通过指针链接

解析:选项A、B和C都是B-树的特点,而选项D则是B+树的特点。注意区别B-树和B+树各自的特点。

----二叉树是一种树形结构,每个节点至多有两颗子树,下列一定是二叉树的是()
正确答案: A C

红黑树
B树
AVL树
B+树

解析:红黑树(Red Black Tree) 是一种自平衡二叉查找树
B树 是一种平衡的多叉树
B+ 树 是一种树数据结构,是一个n叉树
AVL树是自平衡二叉查找树

----2020/5/12

----一个带权的无向连通图的最小生成树的权值之和是唯一的()

正确答案: A


解析: 树不唯一, 权值和唯一

----节点按中序遍历为syz的二叉树可能有()种
正确答案: D

2
3
4
5
解析:在这里插入图片描述

----已知二叉树中有45个叶节点,有25个度为1的节点,则二叉树的总结点数为____。
正确答案: C
112
113
114
115
116
117

解析:
有公式n0=n2+1,所以n2=44,所以n=n0+n1+n2=44+45+25=114
度为2的结点比叶子结点少1个
degree = 0 45个结点
degree = 1 25个结点
degree = 2 44个结点
total = 45+25+44 = 114

----完全二叉树的存储结构通常采用顺序存储结构()
正确答案: A

解析:顺序存储一般只适用于完全二叉树,就是用一维数组存储二叉树中的结点。

----下列关于树的深度优先搜索算法描述错误的是?
正确答案: B

按照某种条件往前试探搜索,如果前进中遭到失败,则退回头另选通路继续搜索,直到找到条件的目标为止。
先访问该节点所有的子节点,遍历完毕后选取它未访问过的子节点重复上述过程,直到找到条件的目标为止。
假设树的顶点数为V,则算法的空间复杂度为O(V)
深度优先算法非常适合使用递归来实现

解析:B 选项的表述 符合广度优先遍历的说法。

----深度为 7 的二叉树共有 127 个结点,则下列说法中错误的是( )。

正确答案: A
该二叉树有一个度为1的结点
该二叉树是满二叉树
该二叉树是完全二叉树
该二叉树有64个叶子结点

解析:在树结构中,一个结点所拥有的后件个数称为该结点的度,所有结点中最大的度称为树的度。完全二叉树指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。满二叉树指除最后一层外,每一层上的所有结点都有两个子结点的二叉树。深度为 7 的二叉树,前 6 层共有结点个数为 26-1=63 ,则第 7 层有 127-63=64 个结点,即第 7 层结点数达到最大值,故此二叉树为满二叉树,也是完全二叉树,该二叉树没有度为 1 的结点,有 64 个叶子结点。故正确答案为 A 选项。

----一棵有15个节点的完全二叉树和一棵同样有15个节点的普通二叉树,叶子节点的个数最多会差多少个?()
正确答案: C

3
5
7
9
解析:完全二叉树一共有8个叶结点,而普通二叉树最少可以有1个叶结点,相差最大15-8=7

----用常规的非递归方法遍历一个平衡二叉树,所需的时间复杂度和空间复杂度是?
正确答案: A
O(n),O(n)
O(n),O(1)
O(nn),O(nn)
O(n),O(n*n)

解析:
非递归的访问遍历二叉树的算法中的基本操作是访问结点,则不论按哪一种次序进行遍历,对n个结点的二叉树,其时间复杂度均为O(n)。所需辅助空间为遍历过程中栈的最大容量,即树的深度,最坏情况下为n,则空间复杂度也为O(n)。

----在这里插入图片描述
正确答案: A B
解析:在这里插入图片描述

----2020/5/13

----已知 10 个元素 (54,28,16,34,73,62,95,60,26,43) ,按照依次插入的方法生成一棵二叉排序树,查找值为 62 的结点所需比较次数为()

正确答案: B
4
3
2
5
解析:构成排序二叉树需满足条件:做子树比根节点小,根节点比右子树节点小,递归下去也满足。上图就是排序之后的二叉树,明显查找62需要比较54,73,62,共3次在这里插入图片描述

----在这里插入图片描述
正确答案: A
解析:这是二叉树的层次遍历。(输出结果跟加入队列的顺序相同)

----任何一个带权的无向连通图的最小生成树()

正确答案: B
只有一棵
有一棵或多棵
一定有多棵
可能不存在

解析:对于连通图而言从图中不同顶点出发或从同一顶点出发按照不同的优先搜索过程可以得到不同的生成树。

----集合中任何两个元素都可以比较大小,但比较不满足传递性,则以下说法正确的有( )

正确答案: D
可以通过建立二叉搜索树索引使得在集合中查找元素的时间复杂度降到O(logN)
可以进行快排,排序后使用二分查找可以使得在集合中查找元素的时间复杂度降到O(logN)
可以通过B树索引使得在集合中查找元素的时间复杂度降到O(logN)
可以通过hash索引使得在集合中查找元素的时间复杂度降到O(1)

解析:ABC都需要比较大小的传递性,否则无法实现,而哈希可以认为是单纯的数值计算,并没有大小比较操作,故选D

----一个树高为6的平衡二叉树,其节点数可能是?
正确答案: B

16
32
64
128
解析:在这里插入图片描述

----下面关于B和B+树的叙述中,不正确的是( )

正确答案: C
B树和B+树都是平衡的多叉树。
B树和B+树都可用于文件的索引结构。
B树和B+树都能有效地支持顺序检索。
B树和B+树都能有效地支持随机检索。

解析:B树只支持随机搜索,B+ 树支持随机和顺序搜索。

----一棵完全二叉树共有2018个结点,则叶子结点的个数是?
正确答案: C
995
1517
1009
1521

解析:共有2018个节点说明有11层,前10层的节点总数为1023,所以第11层节点总数为995,995个节点需要占据第10层498个节点,所以第10层的叶节点为512-498=14,所以总共叶节点为995+14=1009


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值