数据结构作业:唯一确定一棵二叉树

合集下载

树的权值深度题目

树的权值深度题目

树的权值深度题目

以下是一棵树的权值深度题目:

给定一棵二叉树,每个节点都有一个非负整数权值。从根节点开始,对于每个节点,如果它的左子节点存在,则左子节点的权值必须比当前节点的权值小;如果它的右子节点存在,则右子节点的权值必须比当前节点的权值大。

我们的任务是找到从根节点到叶子节点的最长路径,使得路径上所有节点的权值之和最大。输出这个最大值,以及对应的路径。

例如,给定二叉树 [1, 2, 3, 4, 5, 6, 7],其中根节点的权值为1,左子节点的权值为2,右子节点的权值为3,叶子节点的权值为4、5、6、7。

在这个例子中,从根节点到叶子节点的最长路径是 [1, 3, 4],路径上所有节点的权值之和为 8,因此输出结果为 [8, [1, 3, 4]]。

注意:给定的二叉树可能有多个最长路径,但只需要输出其中一条即可。

数据结构第六章树和二叉树习题及答案

数据结构第六章树和二叉树习题及答案

习题六树和二叉树

一、单项选择题

1.以下说法错误的是 ( )

A.树形结构的特点是一个结点可以有多个直接前趋

B.线性结构中的一个结点至多只有一个直接后继

C.树形结构可以表达(组织)更复杂的数据

D.树(及一切树形结构)是一种"分支层次"结构

E.任何只含一个结点的集合是一棵树

2.下列说法中正确的是 ( )

A.任何一棵二叉树中至少有一个结点的度为2

B.任何一棵二叉树中每个结点的度都为2

C.任何一棵二叉树中的度肯定等于2

D.任何一棵二叉树中的度可以小于2

3.讨论树、森林和二叉树的关系,目的是为了()

A.借助二叉树上的运算方法去实现对树的一些运算

B.将树、森林按二叉树的存储方式进行存储

C.将树、森林转换成二叉树

D.体现一种技巧,没有什么实际意义

4.树最适合用来表示 ( )

A.有序数据元素 B.无序数据元素

C.元素之间具有分支层次关系的数据 D.元素之间无联系的数据

5.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()A.9 B.11 C.15 D.不确定

6.设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1,M2和M3。与森林F 对应的二叉树根结点的右子树上的结点个数是()。

A.M1 B.M1+M2 C.M3 D.M2+M3

7.一棵完全二叉树上有1001个结点,其中叶子结点的个数是()

A. 250 B. 500 C.254 D.505 E.以上答案都不对

8. 设给定权值总数有n 个,其哈夫曼树的结点总数为( )

A.不确定 B.2n C.2n+1 D.2n-1

数据结构课后习题及答案

数据结构课后习题及答案

填空题(10 *1’ = 10' )

一、概念题

2。2.当对一个线性表经常进行的是插入和删除操作时,采用链式存储结构为宜。

2。3。当对一个线性表经常进行的是存取操作,而很少进行插入和删除操作时,最好采用顺序存储结构。

2。6。带头结点的单链表L中只有一个元素结点的条件是L—〉Next->Next==Null。

3。6。循环队列的引入,目的是为了克服假溢出.

4。2。长度为0的字符串称为空串。

4。5.组成串的数据元素只能是字符。

4。8.设T和P是两个给定的串,在T中寻找等于P的子串的过程称为模式匹配,又称P为模式。

7.2。为了实现图的广度优先搜索,除一个标志数组标志已访问的图的结点外,还需要队列存放被访问的结点实现遍历。

5.7。广义表的深度是广义表中括号的重数

7。8.有向图G可拓扑排序的判别条件是有无回路。

7.9。若要求一个稠密图的最小生成树,最好用Prim算法求解。

8。8.直接定址法法构造的哈希函数肯定不会发生冲突。

9。2。排序算法所花费的时间,通常用在数据的比较和交换两大操作。

1。1。通常从正确性﹑可读性﹑健壮性﹑时空效率等几个方面评价算法的(包括程序)的质量。

1。2.对于给定的n元素,可以构造出的逻辑结构有集合关系﹑线性关系树形关系﹑图状关系四种。

1。3。存储结构主要有顺序存储﹑链式存储﹑索引存储﹑散列存储四种。

1。4。抽象数据类型的定义仅取决于它的一组逻辑特性,而与存储结构无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部使用。

1。5.一个算法具有五大特性:有穷性﹑确定性﹑可行性,有零个或多个输入﹑有一个或多个输入。

数据结构答案第5章

数据结构答案第5章

第 5 章树和二叉树

1970-01-01

第 5 章树和二叉树

课后习题讲解

1. 填空题

⑴树是n(n≥0)结点的有限集合,在一棵非空树中,有()个根结点,其余的结点分成m(m>0)个()的集合,每个集合都是根结点的子树。

【解答】有且仅有一个,互不相交

⑵树中某结点的子树的个数称为该结点的(),子树的根结点称为该结点的(),该结点称为其子树根结点的()。

【解答】度,孩子,双亲

⑶一棵二叉树的第i(i≥1)层最多有()个结点;一棵有n(n>0)个结点的满二叉树共有()个叶子结点和()个非终端结点。

【解答】2i-1,(n+1)/2,(n-1)/2

【分析】设满二叉树中叶子结点的个数为n0,度为2的结点个数为n2,由于满二叉树中不存在度为1的结点,所以n=n0+n2;由二叉树的性质n0=n2+1,得n0=(n+1)/2,n2=(n-1)/2。

⑷设高度为h的二叉树上只有度为0和度为2的结点,该二叉树的结点数可能达到的最大值是(),最小值是()。

【解答】2h -1,2h-1

【分析】最小结点个数的情况是第1层有1个结点,其他层上都只有2个结点。

⑸深度为k的二叉树中,所含叶子的个数最多为()。

【解答】2k-1

【分析】在满二叉树中叶子结点的个数达到最多。

⑹具有100个结点的完全二叉树的叶子结点数为()。

【解答】50

【分析】100个结点的完全二叉树中最后一个结点的编号为100,其双亲即最后一个分支结点的编号为50,也就是说,从编号51开始均为叶子。

⑺已知一棵度为3的树有2个度为1的结点,3个度为2的结点,4个度为3的结点。则该树中有()个叶子结点。

数据结构作业:唯一确定一棵二叉树

数据结构作业:唯一确定一棵二叉树

二、唯一的确定一棵二叉树

需求分析

该程序的主要功能是根据给定的遍历二叉树的前序序列和中序序列,唯一构造出一棵二叉树,并输出该二叉树的后序序列,同时用凹入法打印该二叉树。

设计

1.设计思想

程序中的值采用二叉树的存储结构。

(1)设计两个字符数组Pre和In存放前序序列和中序序列;

(2)根据定义,前序序列中第一个元素一定是树根,在中序序列中该元素之前的所有元素一定在左子树中,其余元素则在右子树中。所以,首先从数组Pre中取出第一个元素Pre[0]作根结点,然后在数组In中找到In[0],以它为界,在其前面的是左子树中序序列,在其后面的是右子树中序序列;

(3)若左子树不为空,沿前序序列向后移动,找到左子树根结点,转(2);

(4)左子树构造完毕后,若右子树不为空,沿前序序列向后移动,找到右子树根结点,转(2);

(5)前序序列中各元素取完则二叉树构造完毕。

在二叉树构建的过程中使用了函数递归的方式。

2.概要设计

程序中最主要的函数即为二叉树的构建函数BuildBiTree()

函数声明方式

void BuildBiTree(BiTreeNode* root,DataType Pre[],DataType In[],int flag[],int m,int n); 其中BiTreeNode* root为将要构建树的根节点;DataType Pre[]和DataType In[]为存储前序序列和中序序列的数组;int flag[]为标记数组,它用来区分In数组中的元素是否已经被加入二叉树中,标记为0时为未加入二叉树,标记为1时表示以加入二叉树;int m为即将加入二叉树的元素区间的下界;int m为即将加入二叉树的元素区间的上界。

二叉树习题及答案

二叉树习题及答案

1. 设一棵完全二叉树共有699个结点,则在该二叉树中的叶子结点数?

1根据“二叉树的第i 层至多有2^(i − 1)个结点;

个结点;深度为k 的二叉树至多有2^k − 1个结点(根结点的深度为1)”这个性质:这个性质:

因为2^9-1 < 699 < 2^10-1 ,所以这个完全二叉树的深度是10,前9层是一个满二叉树,二叉树,

这样的话,这样的话,前九层的结点就有前九层的结点就有2^9-1=511个;个;而第九层的结点数是而第九层的结点数是2^(9-1)=256 所以第十层的叶子结点数是699-511=188个;个;

现在来算第九层的叶子结点个数。现在来算第九层的叶子结点个数。

由于第十层的叶子结点是从第九层延伸的,所以应该去掉第九层中还有子树的结点。因为第十层有188个,所以应该去掉第九层中的188/2=94个;个; 所以,第九层的叶子结点个数是256-94=162256-94=162,加上第十层有,加上第十层有188个,最后结果是350个

2完全二叉树:若二叉树中最多只有最下面两层的结点的度可以小于2,并且最下面一层的结点下面一层的结点(叶结点)(叶结点)(叶结点)都依次排列在该层最左边的位置上,都依次排列在该层最左边的位置上,都依次排列在该层最左边的位置上,这样的二叉树为这样的二叉树为完全二叉树。完全二叉树。

比如图:比如图:

完全二叉树除叶结点层外的所有结点数(叶结点层以上所有结点数)为奇数,此题中,699是奇数,叶结点层以上的所有结点数为保证是奇数,则叶结点数必是偶数,这样我们可以立即选出答案为B !

数据结构含答案

数据结构含答案

数据构造综合练习

一、选择题

1.数据的存储构造包括顺序、、散列和〔〕4种根本类型。

A索引 B数组 C集合 D向量

2.下面程序的时间复杂性的量级为〔〕。

int i=0,s1=0,s2=0;

while〔i++

{if (i%2)

s1+=i;

else s2+=i;

}

A.O(1)

B.O(1bn)

C.O〔n〕

D.O(2n)

3.下面程序段的时间复杂度为〔〕。

for(int i=0;i

for(int j=0;j

a[i][j]=i*j;

A.O(m2)

B.O(n2)

C.O(m+n)

D.O(m*n)

4.在一个长度为n的顺序存储构造的线性表中,向第i个元素〔1≤ i≤n+1〕位置插入一个元素时,需要从后向前依次后移〔〕个元素。

A.n-i

B.n-i+l

C.n-i-l

D.i

5.在一个长度为n的顺序存储构造的线性表中,删除第i个元素〔1≤i≤n+1〕时,需要从前向后依次后移〔〕个元素。

A.n-i

B.n-i+l

C.n-i-l

D.i

6.在一个长度为n的线性表中,删除值为*的元素时需要比拟元素

和移动元素的总次数为〔〕。

A.(n+1)/2

B.n/2

C.n

D.n+1

7.在一个顺序表中的任何位置插入一个元素的时间复杂度为〔〕。

A. O(n)

B. O(n/2)

C. O(1)

D. O(n2)

8. 线性表的链式存储比顺序存储更有利于进展〔〕操作。

A.查找

B.表尾插入和删除

C.按值插入和删除

D.表头的插入和删除

9. 线性表的顺序存储比链式存储更有利于进展〔〕操作。

A.查找

B.表尾插入和删除

C.按值插入和删除

D.表头的插入和删除

10. 在一个表头指针为ph的单链表中,假设要向表头插入一个由指针p指向的结点,则应执行〔〕操作。

数据结构树和二叉树习题(有答案)

数据结构树和二叉树习题(有答案)

E F D G

A

B

/

+ +

* - C

* 第六章

树和二叉树

一、选择题

1.已知一算术表达式的中缀形式为 A+B*C-D/E ,后缀形式为

ABC*+DE/-,其前缀形式为

( )

A .-A+B*C/DE B. -A+B*CD/E C .-+*ABC/DE

D. -+A*BC/DE

【北京航空航天大学 1999 一、3 (2分)】

2.算术表达式

a+b*(c+d/e )转为后缀表达式后为(

)【中山大学 1999 一、5】

A .ab+cde/*

B .abcde/+*+

C .abcde/*++ D

.abcde*/++

3. 设有一表示算术表达式的二叉树(见下图)

它所表示的算术表达式是()

【南京理工大学

1999 一、20(2分)】

A. A*B+C/(D*E)+(F-G)

B. (A*B+C)/(D*E)+(F-G)

C. (A*B+C)/(D*E+(F-G ))

D. A*B+C/D*E+F-G

4. 设树T 的度为4,其中度为1,2,3和4的结点个数分别为

4,2,1,1 则T 中的叶子

数为(

A .5 B

.6 C

.7

D .8

【南京理工大学 2000 一、8 (1.5分)】5. 在下述结论中,正确的是(

)【南京理工大学 1999 一、4 (1分)】①只有一个结点的二叉树的度为0; ②二叉树的度为

2;

③二叉树的左右子树可任意

交换;

④深度为K 的完全二叉树的结点个数小于或等于深度相同的满二叉树。A .①②③ B .②③④ C

.②④

D .①④

6. 设森林F 对应的二叉树为

B ,它有m 个结点,B 的根为p,p 的右子树结点个数为

数据结构第5章作业参考答案

数据结构第5章作业参考答案

第5章树和二叉树

一、单项选择题

1.以下说法错误的是(B )。

A. 存在这样的二叉树,对其采用任何次序的遍历其结点访问序列均相同

B. 二叉树是树的特殊情形

C. 满二叉树中所有叶结点都在同一层上

D. 在二叉树只有一棵子树的情况下,也要指出是左子树还是右子树

2.树最适合用来表示( C)。

A.有序数据元素

B.无序数据元素

C.元素之间具有分支层次关系的数据

D.元素之间无联系的数据

3.下列叙述正确的是(C )。

A. 二叉树是度为2的有序树

B. 完全二叉树一定存在度为1的结点

C. 深度为k的二叉树中结点总数≤2k-1

D. 对于有n个结点的二叉树,其高度为⎣log2n⎦+1

4.按照二叉树的定义,具有三个节点的二叉树有( C )种。

A.3

B.4

C.5

D.6

5.下列叙述中正确的是(C )。

A. 二叉树是度为2的有序树

B. 二叉树中的结点只有一个孩子时无左右之分

C. 二叉树中每个结点最多只有两棵子树,并且有左右之分

D. 二叉树若存在两个结点,则必有一个为根,另一个为左孩子

6.设某二叉树中度数为0的结点数为N0,度数为1的结点数为N l,度数为2的结点数为

N2,则下列等式成立的是( C )。

A.N

0=N

1

+1 B.N

=N

l

+N

2

C.N

=N

2

+1 D.N

=2N1+1

7.设按照从上到下、从左到右的顺序从1开始对完全二叉树进行顺序编号,则编号为i

结点的左孩子结点的编号为( B )。

A. 2i+1

B.2i

C.i/2

D.2i-1

8.有100个结点的完全二叉树由根开始从上到下从左到右对结点进行编号,根结点的编号

为1,编号为46的结点的右孩子的编号为( C )

数据结构二叉树习题含答案

数据结构二叉树习题含答案

第6章树和二叉树

1.选择题

(1)把一棵树转换为二叉树后,这棵二叉树的形态是()。

A.唯一的B.有多种

C.有多种,但根结点都没有左孩子D.有多种,但根结点都没有右孩子

(2)由3 个结点可以构造出多少种不同的二叉树()

A.2 B.3 C.4 D.5

(3)一棵完全二叉树上有1001个结点,其中叶子结点的个数是()。

A.250 B.500 C.254 D.501

(4)一个具有1025个结点的二叉树的高h为()。

A.11 B.10 C.11至1025之间D.10至1024之间(5)深度为h的满m叉树的第k层有()个结点。(1=

A.m k-1 B.m k-1 C.m h-1D.m h-1

(6)利用二叉链表存储树,则根结点的右指针是()。

A.指向最左孩子B.指向最右孩子C.空D.非空

(7)对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用()遍历实现编号。

A.先序 B. 中序 C. 后序 D. 从根开始按层次遍历

(8)若二叉树采用二叉链表存储结构,要交换其所有分支结点左、右子树的位置,利用()遍历方法最合适。

A.前序B.中序C.后序D.按层次(9)在下列存储形式中,()不是树的存储形式

A.双亲表示法B.孩子链表表示法C.孩子兄弟表示法D.顺序存储表示法(10)一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足()。

A.所有的结点均无左孩子B.所有的结点均无右孩子

C.只有一个叶子结点D.是任意一棵二叉树

数据结构习题集

数据结构习题集

数据结构习题集

数据结构试题

一、单项选择

1、若某线性表中最常用的操作是在最后一个元素之前插入和删除元素,则采用___________最节省运算时间.

A、单链表

B、仅有头指针的单循环链表

C、仅有尾指针的单循环链表

D、双链表

2、哈夫曼树的带权路径长度WPL等于___C________.

A、除根以外的所有结点的权植之和

B、所有结点权值之和

C、各叶子结点的带权路径长度之和

D、根结点的值

3、设输入序列为1,2,3,4,5,借助一个栈不可能得到的输出序列是___________.

A、1,2,3,4,5

B、1,4,3,2,5

C、4,1,3,2,5

D、1,3,2,5,4

4、20个结点的完全二叉树,其高度为___________.

A、3

B、2

C、4

D、5

5、栈和队列都是___________.

A、顺序存储的线性结构

B、链式存储的线性结构

C、限制存储点的线性结构

D、限制存储点的非线结构

6、已知完全二叉树有30个结点,则整个二叉树有___________个度为1的结点.

A、0

B、1

C、2

D、不确定

7、对于N个结点的完全无向图,其边数是___________

A、N

B、N2

C、N(N+1)/2

D、N(N+1)

8、队列的特点是

A、先进先出

B、先进后出

C、后进先出

D、不进不出

9、连通分量是的极大连通子图。

A、有向图

B、树

C、无向图

D、图

10、现有一“遗传”关系:设x是y的父亲,则x可以把它的属性遗传给y。表示该遗传关系最适合的数据结构为..............................

A、向量

B、树

C、图

数据结构试题及答案

数据结构试题及答案

数据结构试题

一、单选题

1、在数据结构的讨论中把数据结构从逻辑上分为(C )

A 内部结构与外部结构

B 静态结构与动态结构

C 线性结构与非线性结构

D 紧凑结构与非紧凑结构。

2、采用线性链表表示一个向量时,要求占用的存储空间地址(D )

A 必须是连续的

B 部分地址必须是连续的

C 一定是不连续的

D 可连续可不连续

3、采用顺序搜索方法查找长度为n的顺序表时,搜索成功的平均搜索长度为( D )。

A n

B n/2

C (n-1)/2

D (n+1)/2

4、在一个单链表中,若q结点是p结点的前驱结点,若在q与p之间插入结点s,则执行( D )。

A s→link = p→link;p→link = s;

B p→link = s; s→link = q;

C p→link = s→link;s→link = p;

D q→link = s;s→link = p;

5、如果想在4092个数据中只需要选择其中最小的5个,采用( C )方法最好。

A 起泡排序

B 堆排序

C 锦标赛排序

D 快速排序

6、设有两个串t和p,求p在t中首次出现的位置的运算叫做( B )。

A 求子串

B 模式匹配

C 串替换

D 串连接

7、在数组A中,每一个数组元素A[i][j]占用3个存储字,行下标i从1到8,列下标j从1到10。所有数组元素相继存放于一个连续的存储空间中,则存放

该数组至少需要的存储字数是( C )。

A 80

B 100

C 240

D 270

8、将一个递归算法改为对应的非递归算法时,通常需要使用( A )。

A 栈

B 队列

C 循环队列

D 优先队列

西安科技大学824数据结构与算法设计B2008年考研真题答案

西安科技大学824数据结构与算法设计B2008年考研真题答案

5.D 10.A
三、解答题(任选 6 题,每题 10 分,共 60 分)
1.【解答】: (1)由于表长 n 已给定,此时证明理想的块长度应为 n ,即
b= n = 100000 =100
(2)由于采用等分区间顺序检索方法进行检索,长度为 n 的表就分成
s= ┏n/b┑=┏10000/10┑=100 块 (3)平均检索长度为:ASL=(b+s)/2+1=(100+100)/2+1=101
当 n=1 时,前、中序序列均只有一个元素且相同,即为根,由此唯一确 定一个二叉树。
假设 n<m-1 时结论成立,则证明 n=m 时成立。 假设前序序列为 a1,a2,…,am,中序序列为 b1,b2,…,bm。 因为前序序列由前序遍历而得,则 a1 即为根结点的元素,又中序序列由 中序遍历而得,则在中序序列中必能找到与 a1 相同的元素,设为 bj,由此 可以得到{b1,…,bj-1}为左子树的中序序列,{bj+1,…,bm}为右子树的中序 序列。 若 j=1,即 b1 为根,此时二叉树的左子树为空,{a2,…,am}为右子树的 前序序列,{b2,…,bm}为右子树的中序序列。右子树的结点数为 m-1。由此, 这两个序列唯一确定了右子树,也唯一确定了二叉树。 若 j=m , 即 bm 为 根 , 此 时 二 叉 树 的 右 子 树 为 空 , 同 上 , 子 序 列 {a2,…,am}{b1,…,bm-1}唯一确定左子树。 若 2<=j<=m-1,则子序列{a2,…,aj}{b1,…,bj-1}唯一确定了左子树, 子序列{aj+1,…,am}{bj+1,…,bm}唯一确定了右子树。 由此证明了唯一的根及其左右子树只能构成一棵确定的二叉树。 同理,中序、后序序列可唯一确定一棵二叉树。 4【解答】(9 分) 一棵二叉树的先序序列、中序序列、后序序列如下,填空使之完整 先序: (A)B(D)F(K)I C E H(J ) G 中序: D(B)K F I A(H)E J(C)( G ) 后序: (D)K(I)F B H J(E)G(C) A 5.【解答】 (1)表长为 14,运用除留余数法作哈希函数,选择一个最接近 14 的一个素 数 13 作为除数,该哈希函数为 H(key)=key MOD 13。 (2)用线性探测再散列法解决冲突,各关键字在表中的位置如下所示:

武汉理工大数据结构作业答案

武汉理工大数据结构作业答案

一、判断(共计40分,每题2.5分)

1、层次遍历初始堆可以得到一个有序的序列。()

A. 正确

B. 错误

错误:【B】

2、分块查找的平均查找长度不仅与索引表的长度有关,而且与块的长度有关。()

A. 正确

B. 错误

错误:【A】

3、设一棵二叉树的先序序列和后序序列,则能够唯一确定出该二叉树的形状。()

A. 正确

B. 错误

错误:【B】

4、快速排序是排序算法中平均性能最好的一种排序。()

A. 正确

B. 错误

错误:【A】

5、设初始记录关键字基本有序,则快速排序算法的时间复杂度为O(nlog2n)。()

A. 正确

B. 错误

错误:【B】

6、先序遍历一棵二叉排序树得到的结点序列不一定是有序的序列。()

A. 正确

B. 错误

错误:【A】

7、冒泡排序在初始关键字序列为逆序的情况下执行的交换次数最多。()

A. 正确

B. 错误

错误:【A】

8、线性表的顺序存储结构比链式存储结构更好。()

A. 正确

B. 错误

错误:【B】

9、子串“ABC”在主串“AABCABCD”中的位置为2。( )

A. 正确

错误:【A】

10、调用一次深度优先遍历可以访问到图中的所有顶点。()

A. 正确

B. 错误

错误:【B】

11、线性表中的所有元素都有一个前驱元素和后继元素。()

A. 正确

B. 错误

错误:【B】

12、向二叉排序树中插入一个结点需要比较的次数可能大于该二叉树的高度。()

A. 正确

B. 错误

错误:【B】

13、满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。()

A. 正确

B. 错误

错误:【A】

14、非空的双向循环链表中任何结点的前驱指针均不为空。()

数据结构-期末复习习题

数据结构-期末复习习题

1. 假设已知一棵二叉树的先序序列:ABDGJEHCFIKL;中序序列:DJGBEHACKILF,要求:

(1)画出该二叉树(简要写明分析过程):(2)写出该二叉树的后序遍历序列:

2. 一棵二叉树如下面的图所示,要求:(1)写出对此二叉树进行中序遍历时得到的结点序列。

(2)画出由此二叉树转换得到的森林。

3. 给定一组权值(5,9,11,2,7,16),试设计相应的Huffman树, 并计算所构造的Huffman树的带权路径长度。

4.设矩阵A是一个n阶对称矩阵,对之压缩存储,将其上三角部分(包括主对角线上的元素)以列序为主序依次存放在一维数组B[1..n(n+1)/2]中,对下三角部分中任一元素a ij (i≥j),在数组B的下标位置k的值是。

5. 若对如下的二叉树进行中序线索化,则结点x的左、右线索指向的结点分别是

6.判定一个循环队列QU(最多元素为m0)为满队列的条件是

7.在一个单链表中,已知q 所指结点是p 所指结点的前驱结点,若在q 和p 之间插入s 结点,则执行的序列是

8.从一个具有n个结点的单链表中查找其值等于x 结点时,在查找成功的情况下,需平均比较多少个结点

9.一个广义表为(a,(a,b),d,e,((i,j),k)),则该广义表的深度是多少表尾是多少

武汉大学数据结构考试试题附答案

武汉大学数据结构考试试题附答案

1. 下面程序段的执行次数为(A )

for(i=0;i<n-1;i++)

for(j=n;j>i;j--)

state;

A. n(n+2)2 B .(n-1)(n+2)2 C. n(n+1)2 D. (n-1)(n+2)

2. 一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( B )A. 110 B .108 C. 100 D. 120

3. 一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是( C )A. edcba B .decba

C. dceab

D. abcde

4. 循环队列用数组A[0,m-1]存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是( D )

A. (rear-front+m)%m B .read-front+1C. read-front-1 D. read-front

5.不带头结点的单链表head为空的判定条件是( A )A. head=NULL B .head-next=NULLC. head-next=head D. head!=NULL

6.在一个单链表中,若p所指的结点不是最后结点,在p之后插入s所指结点,则执行(B)A. s-next=p;p-next=s; B .s-next=p-next;p-next=s; C. s-next=p-next;p=s; D. p-next=s;s-next=p;

7. 从一个具有n个结点的单链表中查找其值等于x结点时,在查找成功的情况下,需平均比较多少个结点(D )A. n B .n2 C. (n-1)2 D. (n+1)28.从一个栈顶指针为HS的链栈中删除一个结点时,用x保存被删结点的值,则执行( D )A. x=HS;HS=HS-next;B .x=HS-data;C. HS=HS-next;x=HS-data;D. x=HS-data;HS=HS-next; 9.串是一种特殊的线性表,其特殊性体现在( B )

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

二、唯一的确定一棵二叉树

需求分析

该程序的主要功能是根据给定的遍历二叉树的前序序列和中序序列,唯一构造出一棵二叉树,并输出该二叉树的后序序列,同时用凹入法打印该二叉树。

设计

1.设计思想

程序中的值采用二叉树的存储结构。

(1)设计两个字符数组Pre和In存放前序序列和中序序列;

(2)根据定义,前序序列中第一个元素一定是树根,在中序序列中该元素之前的所有元素一定在左子树中,其余元素则在右子树中。所以,首先从数组Pre中取出第一个元素Pre[0]作根结点,然后在数组In中找到In[0],以它为界,在其前面的是左子树中序序列,在其后面的是右子树中序序列;

(3)若左子树不为空,沿前序序列向后移动,找到左子树根结点,转(2);

(4)左子树构造完毕后,若右子树不为空,沿前序序列向后移动,找到右子树根结点,转(2);

(5)前序序列中各元素取完则二叉树构造完毕。

在二叉树构建的过程中使用了函数递归的方式。

2.概要设计

程序中最主要的函数即为二叉树的构建函数BuildBiTree()

函数声明方式

void BuildBiTree(BiTreeNode* root,DataType Pre[],DataType In[],int flag[],int m,int n); 其中BiTreeNode* root为将要构建树的根节点;DataType Pre[]和DataType In[]为存储前序序列和中序序列的数组;int flag[]为标记数组,它用来区分In数组中的元素是否已经被加入二叉树中,标记为0时为未加入二叉树,标记为1时表示以加入二叉树;int m为即将加入二叉树的元素区间的下界;int m为即将加入二叉树的元素区间的上界。

结点操作函数Visit()

函数声明方式:void visit(DataType item);

在进行二叉树的遍历时用来对结点进行一系列的操作。

打印二叉树函数PrintBiTree()

函数声明方式:void PrintBiTree(BiTreeNode* root,int n);

打印二叉树函数同样采用递归的形式,用凹入法对二叉树进行打印输出。

3.详细设计

算法开始阶段先是输入二叉树的前序序列和中序序列,然后调用构建二叉树函数BuildBitree(),并在函数内部进行递归调用进行二叉树的构建。构建完毕后,分别调用二叉树的前序、中序、后序遍历函数遍历二叉树并输出遍历结果,最后调用PrintBiTree()函数用凹入法打印输出二叉树。

我个人觉得比较巧妙的一个地方是设立了一个全局变量P来存储Pre数组的下标,即即将构建的子树的结点,在使用递归构建二叉树的时候不会因函数的结束而销毁变量。

4.调试分析

这个程序应该算是我耗时最久的一个了,最初的问题是在碰到了构建二叉树函数的递归的栈溢出,调试的时候出现递归函数无法进入的情况从而以我目前的调试水平无法调试,后来又从头分析了一边函数才发现是某个循环的错误。解决这个问题后又出现了输出结果不正确的问题,经过调试后才发现是之前对算法的理解出了很大偏差,原因是只考虑了构造元素区间的上界而未考虑下界。所以对函数的结构做了一系列的改变,最终取得成功。

经分析,该程序的时间复杂度为O(lbn),空间复杂度为O(lbn)。

虽然这个程序花费了我比较长的时间,但是它让我明白了调试的重要性,同时也重新熟悉了调试的方法,对我的编程技能有比较大的促进作用。在完成了这次实习之后,内心的喜悦之情无法言表。

5.用户手册

接下来介绍一下该程序的使用方法:

(1)编译运行程序;

(2)按提示输入要构建的二叉树的结点(以PPT上测试数据为例);

(3)按提示输入该二叉树的前序序列;

(4)按提示输入该二叉树的中序序列;

(5)回车以后即可得出结果。

6.测试结果

以题目中的数据为例,所测得结果如下:

同时测试了其他几组数据,结果均正确,在这不再上图。

相关文档
最新文档