校招选择题汇总【树(1)】含答案解析

有问题的下方评论或私聊

1.二叉树的第k层的结点数最多为(D)

A.2^k - 1

B.2*k+1

C.2*k-1

D.2^(k-1)

解析:第k层节点最多2^(k-1)个节点,k层二叉树最多2^k-1个节点

2.设某棵二叉树中只有度数为0和度数为2的结点且度数为0的结点数为n,则这棵二叉中共有(C)个结点

A.2n

B.n+l

C.2n-1

D.2n+l

解析:二叉树中一个性质:度为0的结点(叶子节点)个数N0等于度为2的结点个数N2加1,即N2=N0-1。总结点数N=N0+N1+N2=N0+0+(No-1)=2N0-1。N1表示树中度为1的结点。

3.已知二叉树后根周游序列是DABEC,中根周游序列是DEBAC,它的先根周游序列是(D)

A.ACBED

B.DECAB

C.DEABC

D.CEDBA

解析:后续遍历知C为根节点,中序遍历C在最后,表示C根节点只有左子树,所以先序遍历肯定C先出来,选D;也可以画出图来

4.给定一棵树,可以找到一棵二叉树与之对应(A)

A.对

B.错

解析:二叉树的组成是按照规则来的,按照规则,树的某一个节点作为另一个节点的父节点,或者兄弟节点,或者子节点,这个都是按照逻辑来做成的.
这样的方式是为了保证一棵树做成二叉树之后可以还原成那棵树.

二叉树只是作为树的更高效率的存储方式而已,所以为了保证树结构不会被弄乱,所以按照上面的逻辑,一棵树只能对应一棵二叉树

下面说明在数据结构里面,树转换为二叉树的过程

1)加线,在所有兄弟节点之间加一条线

2)去线,对树中每个节点,只保留它与第一个孩子节点的连线,删除它与其他孩子节点之间的线

3)层次调整,第一个孩子是,二叉树的节点的左孩子,兄弟转换过来的孩子是节点的右孩子

5.对任意一棵树,设它有n个结点,这n个结点的度数之和为(C)

A.n

B.n-2

C.n-1

D.n+1

解析:所有结点的度数之和也就是树的边的个数  边的个数=结点总数-1

6.设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。与森林F对应的二叉树根结点的右子树上的结点个数是(C)

A.M1+M2

B.M3

C.M2+M3

D.M1

解析:

一、树转换为二叉树

由于二叉树是有序的,为了避免混淆,对于无序树,我们约定树中的每个结点的孩子结点按从左到右的顺序进行编号。

将树转换成二叉树的步骤是:
(1)加线。就是在所有兄弟结点之间加一条连线;
(2)抹线。就是对树中的每个结点,只保留他与第一个孩子结点之间的连线,删除它与其它孩子结点之间的连线;
(3)旋转。就是以树的根结点为轴心,将整棵树顺时针旋转一定角度,使之结构层次分明。

二、森林转换为二叉树

森林是由若干棵树组成,可以将森林中的每棵树的根结点看作是兄弟,由于每棵树都可以转换为二叉树,所以森林也可以转换为二叉树。

将森林转换为二叉树的步骤是:
(1)先把每棵树转换为二叉树;
(2)第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树的根结点的右孩子结点,用线连接起来。当所有的二叉树连接起来后得到的二叉树就是由森林转换得到的二叉树。

三、二叉树转换为树

二叉树转换为树是树转换为二叉树的逆过程,其步骤是:
(1)若某结点的左孩子结点存在,将左孩子结点的右孩子结点、右孩子结点的右孩子结点……都作为该结点的孩子结点,将该结点与这些右孩子结点用线连接起来;
(2)删除原二叉树中所有结点与其右孩子结点的连线;
(3)整理(1)和(2)两步得到的树,使之结构层次分明。

四、二叉树转换为森林

二叉树转换为森林比较简单,其步骤如下:
(1)先把每个结点与右孩子结点的连线删除,得到分离的二叉树;
(2)把分离后的每棵二叉树转换为树;
(3)整理第(2)步得到的树,使之规范,这样得到森林。

根据树与二叉树的转换关系以及二叉树的遍历定义可以推知,树的先序遍历与其转换的相应的二叉树的先序遍历的结果序列相同;树的后序遍历与其转换的二叉树的中序遍历的结果序列相同;树的层序遍历与其转换的二叉树的后序遍历的结果序列相同。由森林与二叉树的转换关系以及森林与二叉树的遍历定义可知,森林的先序遍历和中序遍历与所转换得到的二叉树的先序遍历和中序遍历的结果序列相同。

7.二叉树是非线性数据结构,所以(D)

A.它不能用顺序存储结构存储

B.它不能用链式存储结构存储

C.顺序存储结构和链式存储结构都不能使用

D.顺序存储结构和链式存储结构都能存储

解析:二叉树可以用数组存储,如果该二叉树不是平衡的,那么会浪费很多数组空间;链式则不会

8.设某二叉树的后序序列为cba,中序序列为abc,则前序序列为什么(B)

A.CBA

B.ABC

C.CAB

D.BCA

解析:后续遍历看出a为根节点,中序看出a在前所以a只有右子树,所以前序遍历a先出来,选B

9.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是(B)

A.9

B.11

C.15

D.不确定

解析:同2题

10.一棵二叉树的前序遍历序列为ABCDEFG,它的中序遍历序列可能是(B)

A.CABDEFG

B.ABCDEFG

C.DACEFBG

D.ADCFEG

解析:画一个可能的树出来就行

11.在一棵度为3的树中,度为3的节点个数为2,度为2的节点个数为1,则度为0的节点个数为(A)

A.6

B.5

C.4

D.7

解析:同2题

12.在二叉树节点的先序序列、中序序列和后序序列中,所有叶子节点的先后顺序(B)

A.都不相同

B.完全相同

C.先序和中序相同,而与后序不同

D.中序和后序相同,而与先序不同

解析:注意是叶子结点顺序 先序DLR 中序LRD 后序LRD 都是先左再右
13.设一棵三叉树中有 2 个度数为 1 的结点, 2 个度数为 2 的结点, 2 个度数为 3 的结点,则该三叉链权中有(C)个度数为 0 的结点。

A.5

B.6

C.7

D.8

解析:同2题

14.在图G的最小生成树G1中,可能会有某条边的权值超过未选边的权值(A)

A.对

B.错

解析:最小生成树的性质:

1)不唯一

2)边的权值总是唯一的,虽然最小生成树不唯一,但其对应的边的权值之和总是唯一的,而且是最小的

3)最小生成树的边数为顶点数减1

15.在一棵度为4的树T中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为1的结点,则树T的叶结点个数是(B)。

A.41

B.82

C.113

D.122

解析:同2题

16.若一个叶子结点是某子树的中序遍历序列的最后一个结点,则它必是孩子树的先序遍历中的最后一个结点。这种说法(A)

A.正确

B.错误

解析:同12题

17.对一棵二叉树进行层次遍历时,应借助于一个栈(B)

A.对

B.错

解析:层序遍历依靠队列实现

18.若X是二叉树中序线索树中有一个左孩子的结点,且X不为根,则x的前驱为(C)

A.X的双亲

B.X的右子树中最左的结点

C.X的左子树中最右结点

D.X的左子树的最左结点

解析:参考 https://blog.csdn.net/shenaisi/article/details/81291898

19.缀表达式为-+a*b-cd/ef,后缀表达式为abcd-*+ef/-,对应二叉树的中序遍历序列是(B)

a+b*-e/fc-d

a+b*(c-d)-c/f

a+b*-e/fcd-

a+b-*e/fc-d

解析:二叉树的中序遍历

20.将一棵树转换为二叉树后,这棵二叉树的形态是(B)

A.一定没有左子树

B.一定没有右子树

C.一定同时具有左子树和右子树

D.不确定

解析:同题6

21.二叉树中每个结点的两棵子树是有序的(A)

A.正确

B.错误

解析:一左一右

22.n个结点的线索二叉树上含有的线索数为(B)

A.2n

B.n+1

C.n-1

D.n

解析:同18题

23.n个结点的线索二叉树上含有的线索数为(C)

A.2n

B.n-1

C.n+1

D.n

解析:同18题

24.下面关于m阶B树说法正确的是(B)

①每个结点至少有两棵非空子树;②树中每个结点至多有m一1个关键字;

③所有叶子在同一层上; ④当插入一个数据项引起B树结点分裂后,树长高一层。

A.①②③

B.②③

C.②③④

D.③

解析:M阶B树结构定义:

(1)根结点至少有2个孩子;

(2)非根结点至少有 M/2-1【上取整】个关键字,至多有 M-1个关键字,并以升序排列;

(3)非根结点至少有 M/2【上取整】个孩子,至多有M个孩子;

(4)key[i]结点与key[i+1]结点之间的孩子结点的值介于 key[i]结点与key[i+1]结点之间;

(5)所有的叶子结点均在同一层;

25.一棵有n个结点的二叉树,按层次从上到下,同一层从左到右顺序存储在一维数组A[1..n]中,则二叉树中第i个结点(i从1开始用上述方法编号)的右孩子在数组A中的位置是(D)

A.A[2i](2i<=n)

B.A[2i+1](2i+1<=n)

C.A[i-2]

D.条件不充分,无法确定

解析:必须是完全二叉树才能确定,若是,选择B选项

26.若二叉树采用二叉链表存储结构,要交换其所有分支结点左、右子树的位置,利用(C)遍历方法最合适

A.前序

B.中序

C.后序

D.按层次

解析:用二叉链表存储结构也就是左孩子右兄弟的存储结构。

后序遍历比较合理。正常的逻辑应该就是:做好当前结点子树内部的交换,然后交换当前结点的左右子树。刚好符合后序遍历的算法逻辑。
1. 交换好左子树
2. 交换好右子树
3. 交换左子树与右子树
其他算法如先序和按层次其逻辑都差不多,即访问当前结点时交换其左右子树。从逻辑上来看稍显别扭一点点。因此说最合适应该是后序遍历,但是从实现上来说先序和按层次都是可以的。
1. 交换左子树与右子树
2. 遍历左子树
3. 遍历右子树
按层次遍历
1. 根结点入队列
2. 出队列,交换其左右子树,将子树的根入队列
3. 重复2直到队列为空
中序遍历相对较难实现一些。

27.已知三叉树T中6个叶结点的权分别是 2,3,4,5,6,7, T的带权(外部)路径长度最小是(B)

A.27

B.46

C.54

D.56

解析:(2+3)*3+(4+5)*2+6+7=46

28.已知二叉树Node定义如下, 现在需要设计一个方法交换左子树和右子树, 下列方法中, 可以实现交换的是?(D)

class Node {
public:
    Node* left;
    Node* right;
    char content;
 
    Node(char content);
private:
    Node(const Node&);
    Node& operator=(const Node& node);
};

A.void swap(Node root) {Node* temp=root.left;root.left=root.right;root.right=temp;}

B.void swap(Node& left, Node& right) {Node temp=left; left=right;right=temp;}

C.void swap(Node* left, Node* right) {Node* temp=left; left=right;right=temp;}

D.void swap(Node*& left, Node*& right) {Node* temp=left; left=right;right=temp;}

解析:C选项要重载,D选项为指针的引用

29.二叉树是一种树形结构,每个节点至多有两颗子树,下列一定是二叉树的是(A C)

A.红黑树

B.B树

C.AVL树

D.B+树

解析:红黑树是一种优化了的二叉搜索树,在牺牲严格限制平衡的条件下达到较高的搜索效率。每次往树中插入或者删除元素后都会调整树高。

B树和B+树每个节点可以有多个子树(多度),B+数中所有关键字排在叶子节点,非叶子节点为关键字的索引。B-树关键之排列在树的所有节点上。

AVL树是平衡二叉树。

30.下列哪两个数据结构,同时具有较高的查找和删除性能?(C D)

A.有序数组

B.有序链表

C.AVL树

D.Hash表

解析:树形和哈希表总比线性表强

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值