1. (单选题) 有一“遗传”关系:设x是y的父亲,则x可以把它的属性遗传给y。表示该遗传关系最适合的数据结构为( )
A向量
B树
C图
D二叉树
2. (单选题) 树最合适用来表示( )。
A有序数据元素
B元素之间具有分支层次关系的数据
C无序数据元素
D元素之间无联系的数据
3. (单选题) 对二叉树的结点从1开始连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左、右孩子中,其左孩子编号小于其右孩子编号,则可采用( )次序的遍历实现二叉树的结点编号。
A先序
B中序
C后序
D从根开始按层次遍历
4. (单选题) 假定一棵三叉树的结点数为50,则它的最小高度为( )。
A3
B4
C5
D6
设根结点层次为1
第一层:1个结点
第二层最多有:3个结点
第三层最多有:9个结点
第四层有:27个结点
第五层最多有:81个结点
1 + 3 + 9 + 27 = 40 < 50
1 + 3 + 9 + 27 + 81 = 121 > 50
所以至少有5层
5. (单选题) 在一棵具有K层的满三叉树中,结点总数为( ).
A(3^k-1)/2
B3^k-1
C(3^k-1)/3
D3^k
满二叉树节点数n =1+3+3^2+...+3^(k-1)=(3^k-1)/2
6. (单选题) 按照二叉树的定义,具有3个结点的二叉树有( )种。
A3
B4
C5
D6
7. (单选题) 对一个满二叉树,m个树叶,n个结点,深度为h,则( )。
An=h+m
Bh+m=2n
Cm=h-1
Dn=2^h-1
8. (单选题) 在一棵二叉树上第5层的结点数最多为( )(假设根结点的层数为0)
A8
B16
C15
D32
为满二叉树时,第五层节点数最多为2^5=32 (题目要求根节点层数为0)
9. (单选题) 深度为5的二叉树至多有( )个结点。
A16
B32
C31
D10
为满二叉树时,总节点数最多为1+2^1+2^2+2^3+2^4=2^5-1=31
10. (单选题) 一棵有124个叶结点的完全二叉树,最多有( )个结点。
A247
B248
C249
D250
E251
完全二叉树有如下性质:
n=n0+n1+n2 n0=n2+1
n:节点总数
n0:度为0的节点个数,也就是叶子节点
n1:度为1的节点个数,在完全二叉树中值有0和1这两种情况
n2:度为2的节点个数
因为n0=124
所以n2=123
n1=0或1(要最多的节点数,n1取1)
n=n0+n1+n2=124+1+123=248
11. (单选题) 含有129个叶结点的完全二叉树,最少有( )个结点。
A254
B255
C256
D257
E258
完全二叉树有如下性质:
n=n0+n1+n2 n0=n2+1
n:节点总数
n0:度为0的节点个数,也就是叶子节点
n1:度为1的节点个数,在完全二叉树中值有0和1这两种情况
n2:度为2的节点个数
因为n0=129
所以n2=128
n1=0或1(要最少的节点数,n1取0)
n=n0+n1+n2=129+0+128=257
12. (单选题) 假定在一棵二叉树中,双分支结点数为15,单分支结点数为30个,则叶子结点数为( )个。
A15
B16
C17
D47
n0=n2+1
证明:设二叉树上叶节点数为n0,单分支节点数为n1,双分支节点数为n2,则总节点数n=n0+n1+n2。在一棵二叉树中,所有节点的分支数(即度数)应等于单分支节点数加上双分支节点数的2倍,即总的分支数=n1+2n2。
由于二叉树中除根节点以外,每个节点都有唯一的一个分支指向它,因此二叉树中有:总的分支数=总节点数-1。
由上述三个等式可得:n1+2n2=n0+n1+n2-1
即:n0=n2+1
13. (单选题) 用顺序存储的方法将完全二叉树中所有结点逐层存放在数组R[1..n]中,结点R[i]若有左子树,则左子树是结点( )
AR[2i+1]
BR[2i]
CR[i/2]
DR[2i-1]
14. (单选题) 在一非空二叉树的中序遍历序列中,根结点的右边( )。
A只有右子树上的所有结点
B只有右子树上的部分结点
C只有左子树上的部分结点
D只有左子树上的所有结点
中序遍历的顺序是:左根右
在根节点的右边是右子树上所有的节点
15. (单选题) 任何一棵二叉树的叶结点在先序、中序和后序遍历中的相对次序( )。
A不发生改变
B发生改变
C不能确定
D以上都不对
叶子节点即没有左右子树的节点,没有左右子树的话,叶子节点不能做根,先序、中序、后序的遍历顺序是根位置的改变,因此叶结点在先序、中序和后序遍历中的相对次序不发生改变。
16. (单选题) 设 n,m为一棵树上的两个结点,在中序遍历时,n在m前的条件是( )。
An在m右方
Bn是m祖先
Cn在m左方
Dn是m子孙
17. (单选题) 已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是( )。
Aacbed
Bdecab
Cdeabc
Dcedba
18. (单选题) 若二叉树采用二叉链表作存储结构,要交换其所有分支结点左右子树的位置,利用( )遍历方法最合适。
A前序
B中序
C后序
D层次
用二叉链表存储结构也就是左孩子右兄弟的存储结构。
后序遍历比较合理。正常的逻辑应该就是:做好当前结点子树内部的交换,然后交换当前结点的左右子树。刚好符合后序遍历的算法逻辑。
1、交换好左子树
2、交换好右子树
3、交换左子树与右子树
其他算法如先序和按层次其逻辑都差不多,即访问当前结点时交换其左右子树。从逻辑上来看稍显别扭一点点。因此说最合适应该是后序遍历,但是从实现上来说先序和按层次都是可以的。
1、交换左子树与右子树
2、遍历左子树
3、遍历右子树
按层次遍历
1、根结点入队列
2、出队列,交换其左右子树,将子树的根入队列
3、重复2直到队列为空
中序遍历相对较难实现一些。
19. (单选题) 欲实现任意二叉树的后序遍历的非递归算法而不必使用栈结构,最佳方案是二叉树采用( )存储结构。
A三叉链表
B广义表
C二叉链表
D顺序
20.具有n个结点的完全二叉树,其叶结点的个数为_n/2(向上取整)___。
设叶子节点n0,度为1的节点n1,度为2的节点n2;
n=n0+n1+n2;
n个节点则有树枝n-1;
n1有树枝n1条,n2有树枝2n2条,n0没有树枝,则
n-1=n0+2*n2;
n0 = n2 +1;
n0 = (n-n1+1)/2;
n1=0 或 1;
当n1=0时 n0= (n+1)/2;
当n1=1时 n0= n/2;