选择题错了两个(1个4分1个2分),其他的应该没错
X2-1做错了,应该选B
x2-13做错了,应该选D
有什么问题评论问我就好,我一般一天内就能回复
编程题:
#include
typedef int TElemType;//千万别写成char
#define maxn 101
using namespace std;
typedef struct TNode* BinTree;
struct TNode{
TElemType data;
BinTree left;
BinTree right;
};
int n;
int mid[maxn];
int post[maxn];
BinTree build(int *mid,int *post,int n)//第一个参数是中序序列的起始位置,第二个参数是后序序列的起始位置
{
BinTree tmp = (BinTree)malloc(sizeof(TNode));
tmp->data = post[n-1];//第一个结点指向后序遍历的最后,也就是后序的树根
int i;
if(n == 0)
return NULL;
for(i = 0;i < n;i++)
{
if(mid[i] == post[n-1])//找中序的根
break;//找到就跳出来
}
tmp->left = build(mid,post,i);//传入左子树的mid与post
tmp->right = build(mid+i+1,post+i,n-i-1);//传入右子树的mid与post
//tmp->data = post[n-1];//第一个结点指向后序遍历的最后,也就是后序的树根
return tmp;
}
void PreorderTraversal( BinTree BT )
{
if(BT)
{
cout<<" "<data;
if(BT->left)
PreorderTraversal( BT->left );
if(BT->right)
PreorderTraversal( BT->right );
}
else
return ;
}
int main()
{
cin>>n;
for(int i = 0;i < n;i++)
cin>>post[i];
for(int i = 0;i < n;i++)
cin>>mid[i];
BinTree t = build(mid,post,n);
cout<<"Preorder:";
PreorderTraversal(t);
}
解析:
p1-1:
后者老快了。。。
p1-2
我也不确定,应该是这个原因
p1-3:
基本有序不等于完全有序,完全有序才最快
p1-4:
这个没啥说的,一想就知道了。。。
p1-5:
这个是个公式,所有顶点入度和出度的和等于边数的二倍
x2-1:就是线性探测,没啥难的,每个除一下就好了(前提是你得了解线性探测的方法)
x2-3:
关于堆,要满足两点
1.是个完全二叉树
2.具有有序性(即最大的(或最小的)结点总在最上面)
这个有个简单的方法就是你不管怎么删除怎么插入,他永远是个最小堆,所以最上面的一定是最小的
所以是4
当然你也可以画一下这个过程,比较复杂,但操作都差不多
x2-4:
就是把最小堆调成最大堆
x2-12:
这个有可能没学过,就是
x2-13:
这个题一定得仔细
C:一棵哈夫曼树的带权路径长度等于其中所有分支结点的权值之和这句话没有毛病!!!
书上的定义是说一颗哈夫曼树的带权路径长度等于所有叶子结点的带权路径长度之和,其实是一个意思
而D错在了形状不唯一!!!
3,4,11,20解析日后补充
1-1
2N和NN具有相同的增长速度。 (2分)
T F
作者: DS课程组
单位: 浙江大学
1-2
若用平方探测法解决冲突,则插入新元素时,若散列表容量为质数,插入就一定可以成功。 (2分)
T F
作者: DS课程组
单位: 浙江大学
1-3
对N个不同的数据采用冒泡排序进行从大到小的排序,当元素基本有序时交换元素次数肯定最多。(2分)
T F
作者: DS课程组
单位: 浙江大学
1-4
若一棵平衡二叉树的所有非叶结点的平衡因子都是0,则其必为完美二叉树。(2分)
T F
作者: 徐镜春
单位: 浙江大学
1-5
在一个有向图中,所有顶点的入度与出度之和等于所有边之和的2倍。 (2分)
T F
2-1
给定输入序列 {4371, 1323, 6173, 4199, 4344, 9679, 1989} 以及散列函数 h(X)=X%10。如果用大小为10的散列表,并且用线性探测解决冲突,则输入各项经散列后在表中的下标为:(-1表示相应的插入无法成功)(4分)
作者: DS课程组
单位: 浙江大学
2-2
在图中自a点开始进行广度优先遍历算法可能得到的结果为: (2分)
作者: DS课程组
单位: 浙江大学
2-3
将 { 10, 12, 1, 14, 6, 5, 8, 15, 3, 9, 7 } 逐个按顺序插入到初始为空的最小堆中,然后连续执行两次删除最小元素操作(DeleteMin),再插入4,16,此后堆顶的元素是什么? (4分)
作者: 何钦铭
单位: 浙江大学
2-4
设最小堆(小根堆)的层序遍历结果为{5, 18, 15, 28, 22, 42, 40}。用线性时间复杂度的算法将该堆调整为最大堆(大根堆),则该树的中序遍历结果为:(4分)
作者: DS课程组
单位: 浙江大学
2-5
对于序列{ 49,38,65,97,76,13,27,50 },按由小到大进行排序,下面哪一个是初始步长为4的希尔排序法第一趟的结果? (4分)
作者: DS课程组
单位: 浙江大学
2-6
在一个链队列中,front和rear分别为头指针和尾指针,则插入一个结点s的操作为( )。 (2分)
作者: 杨斌
单位: 枣庄学院
2-7
将1~6这6个键值插到一棵初始为空的二叉搜索树中。如果插入完成后,搜索树结构如图所示,问:可能的插入序列是什么? (2分)
作者: 何钦铭
单位: 浙江大学
2-8
设一个栈的输入序列是1、2、3、4、5,则下列序列中,是栈的合法输出序列的是? (4分)
作者: DS课程组
单位: 浙江大学
2-9
数据结构中Dijkstra算法用来解决哪个问题? (2分)
作者: DS课程组
单位: 浙江大学
2-10
在拓扑排序算法中用堆栈和用队列产生的结果会不同吗?(2分)
作者: DS课程组
单位: 浙江大学
2-11
在并查集问题中,已知集合元素0~8所以对应的父结点编号值分别是{ 1, -4, 1, 1, -3, 4, 4, 8, -2 }(注:−n表示树根且对应集合大小为n),那么将元素6和8所在的集合合并(要求必须将小集合并到大集合)后,该集合对应的树根和父结点编号值分别是多少? (4分)
作者: DS课程组
单位: 浙江大学
2-12
设数字 {4371, 1323, 6173, 4199, 4344, 9679, 1989} 在大小为10的散列表中根据散列函数 h(X)=X%10得到的下标对应为 {1, 3, 4, 9, 5, 0, 2}。那么继续用散列函数 “h(X)=X%表长”实施再散列并用线性探测法解决冲突后,它们的下标变为:(4分)
作者: DS课程组
单位: 浙江大学
2-13
下列叙述错误的是()。 (2分)
作者: 严冰
单位: 浙江大学城市学院
2-14
对一组数据{ 2,12,16,88,5,10 }进行排序,若前三趟排序结果如下: 第一趟排序结果:2,12,16,5,10,88 第二趟排序结果:2,12,5,10,16,88 第三趟排序结果:2,5,10,12,16,88 则采用的排序方法可能是: (2分)
作者: DS课程组
单位: 浙江大学
2-15
已知一棵二叉树的树形如下图所示,其后序序列为{ e
, a
, c
, b
, d
, g
, f
}。树中与结点a
同层的结点是:(2分)
f
c
d
g
作者: 考研试卷
单位: 浙江大学
2-16
要判断一个整数N(>10)是否素数,我们需要检查3到√N之间是否存在奇数可以整除N。则这个算法的时间复杂度是:(2分)
作者: 徐镜春
单位: 浙江大学
2-17
给出关键字序列{ 4321, 56, 57, 46, 28, 7, 331, 33, 234, 63 },下面哪个选择是按次位优先(LSD)链式基数排序进行了一趟分配和收集的结果? (2分)
作者: DS课程组
单位: 浙江大学
2-18
给定有权无向图的邻接矩阵如下,其最小生成树的总权重是: (4分)
作者: DS课程组
单位: 浙江大学
2-19
在图中自d点开始进行深度优先遍历算法可能得到的结果为: (2分)
作者: DS课程组
单位: 浙江大学
2-20
将 9, 8, 7, 2, 3, 5, 6, 4 顺序插入一棵初始为空的AVL树。下列句子中哪句是错的? (4分)
作者: 徐镜春
单位: 浙江大学
2-21
设栈S和队列Q的初始状态均为空,元素a、b、c、d、e、f、g依次进入栈S。若每个元素出栈后立即进入队列Q,且7个元素出队的顺序是b、d、c、f、e、a、g,则栈S的容量至少是: (2分)
作者: DS课程组
单位: 浙江大学
2-22
在一个有权无向图中,如果顶点b到顶点a的最短路径长度是10,顶点c与顶点b之间存在一条长度为3的边。那么下列说法中有几句是正确的? (4分)