目录
2. 已知一棵二叉树的前序序列为:A,B,D,G,J,E,H,C,F,I,K,L中序序列:D,J,G,B,E,H, A,C,K,I,L,F
一、选择题:(3分)
1. |
在文件“局部有序”或文件长度较小的情况下,最佳内部排序方法是(选择一项)(选择一项) A |
|
A. |
直接插入排序 |
|
B. |
冒泡排序 |
|
C. |
简单选择排序 |
|
D. |
归并排序 |
2. |
排序的方法有许多种,( )从未排序的序列中依次取出元素,与已排序序列(初始时为空)中的元素作比较,将其放入已排序序列的正确位置上;()法从未排序序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端;交换排序法是对序列中的元素进行一系列比较,当两元素逆序时,进行交换;( )和( )是基于这类方法的两种排序方法。( )法是基于选择排序的一种排序方法,是完全二叉树结构的一个重要应用。C A BD G |
|
A. |
选择排序 |
|
B. |
快速排序 |
|
C. |
插入排序 |
|
D. |
冒泡排序 |
|
E. |
归并排序 |
|
F. |
希尔排序 |
|
G. |
堆排序 |
|
H. |
基数排序 |
3. |
下面关于折半查找的叙述正确的是(选择一项) D |
|
A. |
表必须有序,表可以顺序方式存储,也可以链表方式存储 |
|
B. |
表必须有序且表中数据必须是整型,实型或字符型 |
|
C. |
表必须有序,而且只能从小到大排列 |
|
D. |
表必须有序,且表只能以顺序方式存储 |
4. |
设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1 则T中的叶子数为(选择一项) D |
|
A. |
5 |
|
B. |
6 |
|
C. |
7 |
|
D. |
8 |
5. |
在下述结论中,正确的是( )(选择一项) D ①只有一个结点的二叉树的度为0;②二叉树的度为2;③二叉树的左右子树可任意交换;④深度为K的完全二叉树的结点个数小于或等于深度相同的满二叉树。 |
|
A. |
①②③ |
|
B. |
②③④ |
|
C. |
②④ |
|
D. |
①④ |
6. |
若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是( )(选择一项) B |
|
A. |
9 |
|
B. |
11 |
|
C. |
15 |
|
D. |
不确定 |
7. |
已知一棵二叉树的前序遍历结果为ABCDEF,中序遍历结果为CBAEDF,则后序遍历的结果为()(选择一项) A |
|
A. |
CBEFDA |
|
B. |
FEDCBA |
|
C. |
CBAEDF |
|
D |
不定 |
8. |
已知某二叉树的后序遍历序列是dabec, 中序遍历序列是debac , 它的前序遍历是( )(选择一项) D |
|
A. |
ACBED |
|
B. |
DECAB |
|
C. |
DEABC |
|
D |
CEDBA |
9. |
已知某二叉树中序序列为A,B,C,D,E,F,G,后序序列为B,D,C,A,F,G,E 则前序序列是( )(选择一项) B |
|
A. |
EGFACDB |
|
B. |
EACBDGF |
|
C. |
EAGCEBD |
|
D |
上面都不对 |
10. |
有六个元素6,5,4,3,2,1 的顺序进栈,问下列哪一个不是合法的出栈序列?( )(选择一项) C |
|
A. |
543612 |
|
B. |
453216 |
|
C. |
346521 |
|
D |
234156 |
11. |
设栈的输入序列是1,2,3,4,则()不可能是其出栈序列?(选择一项) D |
|
A. |
1243 |
|
B. |
2134 |
|
C. |
1234 |
|
D |
4312 |
|
E. |
3214 |
12. |
一个栈的输入序列为1 2 3 4 5,则下列序列中不可能是栈的输出序列的是?(选择一项) B |
|
A. |
21435 |
|
B. |
54132 |
|
C. |
23145 |
|
D |
15432 |
13. |
设一个栈的输入序列是 1,2,3,4,5,则下列序列中,是栈的合法输出序列的是( )?(选择一项) D |
|
A. |
51234 |
|
B. |
45132 |
|
C. |
43125 |
|
D |
32154 |
14. |
某堆栈的输入序列为a, b,c ,d,下面的四个序列中,不可能是它的输出序列的( )?(选择一项) D |
|
A. |
acbd |
|
B. |
bcda |
|
C. |
cdba |
|
D |
dcab |
15. |
输入序列为ABC,可以变为CBA时,经过的栈操作为( )?(选择一项) B |
|
A. |
push,pop,push,pop,push,pop |
|
B. |
push,push,push,pop,pop,pop |
|
C. |
push,push,pop,pop,push,pop |
|
D |
push,pop,push,push,pop,pop |
16. |
下述哪一条是顺序存储结构的优点?(选择一项) A |
|
A. |
存储密度大 |
|
B. |
插入运算方便 |
|
C. |
删除运算方便 |
|
D |
可方便地用于各种逻辑结构的存储表示 |
17. |
下面关于线性表的叙述中,错误的是哪一个?( )(选择一项) B |
|
A. |
线性表采用顺序存储,必须占用一片连续的存储单元。 |
|
B. |
线性表采用顺序存储,便于进行插入和删除操作。 |
|
C. |
线性表采用链接存储,不必占用一片连续的存储单元。 |
|
D |
线性表采用链接存储,便于插入和删除操作。 |
18. |
具有10个叶结点的二叉树中有( )个度为2的结点(选择一项) B |
|
A. |
8 |
|
B. |
9 |
|
C. |
10 |
|
D |
11 |
19. |
有关二叉树下列说法正确的是( )(选择一项) B |
|
A. |
二叉树的度为2 |
|
B. |
一棵二叉树的度可以小于2 |
|
C. |
二叉树中至少有一个结点的度为2 |
|
D |
二叉树中任何一个结点的度都为2 |
20. |
二叉树的第I层上最多含有结点数为( )(选择一项) C |
|
A. |
2I |
|
B. |
2I-1-1 |
|
C. |
2I-1 |
|
D |
2I -1 |
二、问答题(每题8分):
1. 给定一个二叉树,找出其最大深度
function(root) {
if(!root) return 0
let level = 1
function dep(root,lev){
level = Math.max(lev,level)
if( root.left)
dep(root.left,lev+1)
if( root.right)
dep(root.right,lev+1)
return
}
dep(root,level)
return level
};
2. 已知一棵二叉树的前序序列为:A,B,D,G,J,E,H,C,F,I,K,L中序序列:D,J,G,B,E,H, A,C,K,I,L,F
(1)写出该二叉树的后序序列;
(2)画出该二叉树;
(3)求该二叉树的高度(假定空树的高度为0)和度为2、度为1、及度为0的结点个数。
(1)该二叉树的后序序列为:J,G,D,H,E,B,K,L,I,F,C,A。
(2)该二叉树的形式如图所示:
(3)
该二叉树高度为:5
度为2的结点的个数为:3
度为1的结点的个数为:5
度为0的结点个数为:4
3. 手写代码:如何合并两个有序链表
let newList = mergeList(list1,list2);
function mergeList(list,otherList) {
let mergeHead = new Node("head")
let listHead = list.head,
let otherListHead = otherList.head;
let current = mergeHead;
while(listHead&&otherListHead){
if(listHead.data<otherListHead.data){
current.next = listHead;
listHead = listHead.next;
}else{
current.next = otherListHead;
otherListHead = otherListHead.next;
}
current = current.next;
}
current.next = listHead || otherListHead;
return mergeHead.next;
}
4. 手写代码:验证二叉搜索树
一个二叉搜索树具有如下特征
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
function isValidBST (root) {
// boolean 变量
let isValidBSTFlag = true;
// 最大值变量
let max = -Number.MAX_VALUE;
const orderSearch = root => {
// 终止条件(判断当前结点是否为 null)
if (root) {
// 中序遍历
orderSearch(root.left);
// 判断遍历前后的值是否逐渐升序
if (root.val > max) {
// 存储当前结点值,进行下一次比较
max = root.val;
} else {
// 当前节点值小于前一结点值,返回 false
isValidBSTFlag = false;
}
orderSearch(root.right);
}
}
orderSearch(root);
return isValidBSTFlag;
};
5. 手写一下快排代码
var quickSort = function(arr) {
if (arr.length <= 1) {
return arr;
}
var pivotIndex = Math.floor(arr.length / 2);
var pivot = arr.splice(pivotIndex, 1)[0];
var left = [];
var right = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] < pivot) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return quickSort(left).concat([pivot], quickSort(right));
};