测试题/笔试题/面试题——数据结构

 目录

一、选择题:(3分)

二、问答题(每题8分):

1. 给定一个二叉树,找出其最大深度

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. 手写代码:如何合并两个有序链表

4. 手写代码:验证二叉搜索树

5. 手写一下快排代码


一、选择题:(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));
};

猜你喜欢

转载自blog.csdn.net/qq_52301431/article/details/126773250