数据结构与算法小测

  • 格式:doc
  • 大小:44.00 KB
  • 文档页数:2

下载文档原格式

  / 2
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2014年秋季北大《数据结构与算法B》随堂摸底测试A

学号_______________ 姓名_______________ 教师/教室____________________

1.下列说法正确的是()

A.空串就是内容空白的串

B.字符串可以采用顺序存储,也可以采用链式存储

C.字符串是一种数据和操作都特殊的线性表

D.在C++标准中,char S[N]最多能表示长度为N的字符串

2.下列关于堆(Heap)的说法正确的有()

A.最小堆(任何结点值都比其左右子树小)最底层最靠右的结点一定是权值最大的结点。

B.堆一定是满二叉树(满二叉树每个结点有0个或2个孩子)。

C.最小堆中,某个结点左子树中最大的结点可能比右子树中最小的结点小。

D.初始建堆时,要使用筛选法建堆要比将元素一个一个插入堆来建堆效率高。

3.下列关于二叉搜索树(Binary Search Tree)的说法正确的有()

A.二叉搜索树按照中序遍历将各结点打印出来,将得到按照由小到大的排列。

B.二叉搜索树一定是满二叉树。

C.当根结点没有左儿子时,根结点一定是二叉搜索树中值最小的结点。

D.如果结点x的左儿子有右子树,则说明存在某个结点的值介于结点x的值和x左儿子的值

之间,并且这个结点在x的左子树之中。

4.下列关于Huffman树和Huffman编码的说法正确的有()

A.Huffman树一定是扩充的二叉树(度为1的结点增加1个外部结点,度为0的增加2个)。

B.对于具有同样的一组权值的内容可以得到不同的Huffman编码方案。

C.Huffman树(具有最小外部路径权重和的二叉树)一定是完全二叉树(除离根最远的底层,

其他每层都铺满了结点;最底层的结点也尽可能排在左侧的二叉树)。

D.Huffman编码中所有编码都是等长的。

5.设栈S 和队列Q 的初始状态为空,元素e1,e2,e3,e4,e5和e6依次通过栈S,一个元素

出栈后即进队列Q,若6 个元素出队的序列是e2,e4,e3,e6,e5,e1则栈S的容量至少应该是。

6.在一棵深度(独根树深度为0)为K的完全二叉树(只有最下层结点度数可以小于2,并

且最下面一层结点都在该层最左边的连续位置上)中,至少存在个结点。

7.已知一棵二叉树的中序遍历序列为DBGEACF,后序遍历序列为DGEBFCA,这棵树的前序遍历序

列为:

8.将1,2,3,………, n顺序入栈,其输出序列为p1, p2, p3,……,p n若p1=n, 则p i为:

9.对于3个结点A,B,C,有棵不同的二叉树(不是树型,是树)?

10.在一棵非空二叉树中,若(出)度为0的结点的个数n,度为2的结点个数为m,则有n=

11.算法填空题(如果填空的思路跟自己不一致,可以自己写思路、完整的带注释算法框架)。

在下面算法中填写合适的语句(每个空缺可以填写0条或多条语句),使得算法功能完整。

一棵二叉树中所有叶结点的最大枝长和最小枝长分别定义如下:

⏹所谓最大枝长就是二叉树层数(根结点为第0层);

⏹所谓最小枝长就是离根结点距离最近的叶结点到根结点的路径上的边数;

⏹空树的最大最小枝长都定义为 -1;

⏹结点数目n =1(独根)的二叉树最大最小枝长都为0,n=2的二叉树最大最小枝长都为1。下面的这个算法,同时求出一棵二叉树所有叶结点的最大和最小枝长。

void FarNearLeaf(BinaryTreeNode *root, int &Far, int &Near) {

// 按照后序周游方式求树的最大/小枝长

int rightFar, leftFar, rightNear, leftNear;

if ( root == NULL ) {

Far=-1; Near=-1; return ; // 空树

}

if ( (root->leftPtr==NULL) && (root->rightPtr==NULL) ){ // 独根/叶结点

return;

}

FarNearLeaf (root->leftPtr,leftFar,leftNear); // 递归求左子树最大/小枝长

FarNearLeaf (root->rightPtr,rightFar,rightNear); // 递归求右子树最大小枝长// 下面填空是求最大枝长,子根root的最大枝长是左右子树较大的最大枝长+1;

if (leftFar > rightFar)

else

if (!root->leftPtr || !root->rightPtr) {// 单支树,最小枝长为非空子树最小枝长+1 if (root->leftPtr)

else

}

else { // 左右子树均存在, 最小枝长为左右子树较小的最小枝长+1 if (leftNear < rightNear)

else

}

}