已知中序和后序求先序

合集下载

中国农业大学_821数据结构_《数据结构》习题(6)

中国农业大学_821数据结构_《数据结构》习题(6)

第6章 二叉树与树一、回答题1. 图6-1所示的树的叶子结点、非中端结点、每个结点的度及树的深度各是多少?图6-1 树2. 已知一棵树边的集合表示为:{ ( L, N ), ( G, K ), ( G, L ), ( G, M ), ( B, E ), ( B, F ), ( D, G ), ( D, H ), ( D, I ), ( D, J ), ( A, B ), ( A, C ), ( A, D ) },画出这棵树,并回答以下问题:(1) 树的根结点是哪个?哪些是叶子结点?哪些是非终端结点? (2) 树的度是多少?各个结点的度是多少? (3) 树的深度是多少?各个结点的层数是多少?(4) 对于结点G ,它的双亲结点、祖先结点、孩子结点、子孙结点、兄弟和堂兄弟分别是哪些结点?3. 如果一棵度为m 的树中,度为1的结点数为n 1,度为2的结点数为n 2,……,度为m 的结点数为n m ,那么该树中含有多少个叶子结点?有多少个非终端结点?ABECDFGHJI4. 任意一棵有n 个结点的二叉树,已知有m 个叶子结点,能否证明度为2结点有m-1个?5. 已知在一棵含有n 个结点的树中,只有度为k 的分支结点和度为0的叶子结点,那么该树含有的叶子结点的数目是多少?6. 一棵含有n 个结点的k 叉树,可能达到的最大深度和最小深度各为多少?7. 对于3个结点A 、B 、C ,可以过程多少种不同形态的二叉树?8. 深度为5的二叉树至多有多少个结点?9. 任何一棵二叉树的叶子结点在先序、中序和后序遍历中的相对次序是发生改变?不发生改变?不能确定?10. 设n 、m 为一棵二叉树上的两个结点,在中序遍历时,n 在m 前的条件是什么? 11. 已知某二叉树的后续遍历序列是dabec ,中序遍历序列是debac ,那么它的前序遍历序列是什么?12. 对一棵满二叉树,m 个树叶,n 个结点,深度为h ,则n 、m 和h 之间的关系是什么? 13. 对图6-2(a)和(b)所示的二叉树,它们的经过先序、中序和后序遍历后得到的结点序列分别是什么?画出它们的先序线索二叉树和后序线索二叉树。

《数据结构》题库及答案

《数据结构》题库及答案

《数据结构》题库及答案一、选择题1.线性表的顺序存储结构是一种 的存储结构,线性表的链式存储结构是一种 的存储结构。

a. 随机存储;b.顺序存储;c. 索引存取;d. HASH 存取2.一个栈的入栈序列是a,b,c,d,e ,则栈的不可能的输出序列是 。

a. edcba;b. decba;c. dceab;d.abcde3.一个队列的入队序列是1,2,3,4,则队列的输出序列是 。

a. 4,3,2,1;b. 1,2,3,4;c. 1,4,3,2;d.3,2,4,14.在一个单链表中,已知p 结点是q 结点的直接前驱结点,若在p 和q 之间插入结点s ,则执行的操作是 。

a. s->nxet=p->next; p->next=s;b. p->next=s->next; s->next=p;c. q->next=s; s->next=p;d. p->next=s; s->next=q;5.设有两个串p,q ,求q 在p 中首次出现的位置的运算称作 。

a.联接b.模式匹配c.求子串d.求串长6.二维数组M 的成员是6个字符(每个字符占一个存储单元)组成的串,行下标i 的范围从0到8,列下标j 的范围从1到10,则存放M 至少需要 个字节。

a. 90b.180c.240d.540 7.在线索二叉树中,结点p 没有左子树的充要条件是 。

a. p->lch==NULLb. p->ltag==1c. p->ltag==1且p->lch=NULLd. 以上都不对8.在栈操作中,输入序列为(A ,B ,C ,D ),不可能得到的输出序列为:______A 、(A ,B ,C ,D ) B 、(D ,C ,B ,A ) C 、(A ,C ,D ,B ) D 、(C ,A ,B ,D )9.已知某二叉树的后序序列是dabec ,中序序列是debac ,则它的先序序列是 。

数据结构树习题

数据结构树习题

16、 假定在一棵二叉树中, 度为2的结点数为15, 度为1的结点数为30, 则叶子结点数为 ( 个。 A. 15 B. 16 C. 17 D. 47

17、在下列情况中,可称为二叉树的是( B ) 。 A. 每个结点至多有两棵子树的树 B. 哈夫曼树 C. 每个结点至多有两棵子树的有序树 D. 每个结点只有一棵子树 18、用顺序存储的方法,将完全二叉树中所有结点按层逐个从左到右的顺序存放在一维数 组R[1..n]中,若结点R[i]有左孩子,则其左孩子是( ) 。 A. R[2i-1] B. R[2i+1] C. R[2i] D. R[2/i] 19、下面说法中正确的是( ) 。 A. 度为2的树是二叉树 B. 度为2的有序树是二叉树 C. 子树有严格左右之分的树是二叉树 D. 子树有严格左右之分,且度不超过2的树是二叉树 20、树的先根序列等同于与该树对应的二叉树的( ) 。 A. 先序序列 B. 中序序列 C. 后序序列 21、按照二叉树的定义,具有3个结点的二叉树有( )种。 A. 3 B. 4 C. 5 D. 6
D. 层序序列
22、 由权值为3, 6, 7, 2, 5的叶子结点生成一棵哈夫曼树, 它的带权路径长度为 ( A. 51 B. 23 C. 53 D. 74
) 。
二、判断题 ( )1、存在这样的二叉树,对它采用任何次序的遍历,结果相同。 ( )2、中序遍历一棵二叉排序树的结点,可得到排好序的结点序列。 ( )3、对于任意非空二叉树,要设计其后序遍历的非递归算法而不使用堆栈结构,最 适合的方法是对该二叉树采用三叉链表。 ( )4、在哈夫曼编码中,当两个字符出现的频率相同时,其编码也相同,对于这种情 况应做特殊处理。 ( )5、一个含有n个结点的完全二叉树,它的高度是log2n+1。 ( )6、完全二叉树的某结点若无左孩子,则它必是叶结点。 三、填空题 1、具有n个结点的完全二叉树的深度是 。 2、哈夫曼树是其树的带权路径长度 的二叉树。 3 、 在 一 棵 二 叉 树 中 , 度 为 0 的 结 点 的 个 数 是 n0 , 度 为 2 的 结 点 的 个 数 为 n2 , 则 有 n0= 。 4、树内各结点度的 称为树的度。 四、代码填空题 1、函数InOrderTraverse(Bitree bt)实现二叉树的中序遍历,请在空格处将算法补 充完整。 void InOrderTraverse(BiTree bt){ if( ){ InOrderTraverse(bt->lchild); printf(“%c”,bt->data); ; }

《数据结构课程设计》指导书

《数据结构课程设计》指导书

《数据结构》课程设计指导书沈阳理工大学.信息学院2013.11.1一.目的与意义软件设计能力对计算机专业的学生是很重要。

通过数据结构的学习,使学生对软件编程能力有一定的提高。

数据结构课程设计是锻炼学生在进一步掌握模块化、结构化程序设计的方法的同时,培养学生运用已学知识分析问题、解决问题及编写实用程序的能力,通过对线性化、层次化、网络化数据结构的了解进一步掌握自然数据的结构方式及组织方式,让学生深入体会存储在计算机中的数据及程序中如何运用数据实现编程。

主要目的如下:1.通过本课程设计使学生对面向对象的设计过程有初的认识,并对面向对象的高能语言的学习打下基础,2.通过不同类型的程序设计使学生进一步掌握数据的几种不同的组织和存储方式,为高级编程做准备,3.为专业课的深入学习和毕业设计打基础二.任务和要求分析每一组题目,按要求完成相应的题目:1.题目参照附录中《数据结构课程设计》题目选题。

2. 要求:1)对相应的题目进行算法设计2)编写源代码3)上机调试4)显示调试结果5)写出实验总结3.课程设计说明书设计完成后,将自己选定的题目按上述要求完成课程设计说明书。

课程设计说明书内容包含:题目、要求、初步设计(可以是流程图、功能模块图)、详细设计、程序代码、测试数据、运行结果、遇到的问题及总结几部分。

三.进度安排设计总学时为2周第一周:查阅资料、小组讨论、进行模块划分写出分析报告,画N-S结构化框图,编写程序清单,上机调试.第二周周四、五:验收(计算机机房),并将课程设计报告交上来.四.考核标准与成绩评定方式成绩评定有如下几项参考:1.初步设计内容的考核:是否有查阅资料能力?是否有设计思想?2.程序编码能力调试能力的考核:程序是否清晰、易读?在技算计上是否可独立完成程序的调试,是否熟练?3.说明书质量的考核:设计结构是否合理?叙述是否正确?方案是否可行?4.答辩:设计结果的调试能力,对自己设计是否熟练?5.出勤率极平时表现的考核:出勤超过2次不到者成绩为不及格。

树与二叉树典型例题讲解

树与二叉树典型例题讲解

A
F
B
J
E
F H
G
I J
例6.14
Huffman编码设计实例
已知某系统在通信联络中只可能出现8种字符,其概率分别为0.05, 0.29,0.07,0.08,0.14, 0.23,0.03,0.11,试设计Huffman编码。 解一:先构造Huffman树,再进行编码。 Huffman编码实现过程:以报文所用的不同字符为叶结点,以字符 出现频率为权重构造Huffman树;然后将树中结点指向其左孩子的 分支标“0”,指向其右孩子的分支标“1”;每个字符的编码即为 从根到每个叶子(字符)的路径上得到的0、1序列。这种对字符的 编码就是Huffman编码。
100
0 1
HC
42
0 1 0
58
1
0
1 2
0 1
1 0
1
0
3
1
1 1 0 0 0
1
1 1 0 1 1
1
1 0 1 1
0
1
23
0
19
1
29
1
29
1
11
0
8 5
14
0
15
1
4 5 6 7 8
1
3 Huffman树
7
8 Huffman编码
解二:利用Huffman编码算法实现。根据题意,取8个字符的权分别为 (5,29,7,8,14,23,3,11),n=8,则m=2*8-1=15,按上述 算法可构造一棵Huffman树,如下左图和右图分别Huffman树的初始 状态和终止状态。
a
b b d g e h i c ^ d c ^
f e ^ g
^ ^ ^

在线索二叉树中如何求先序

在线索二叉树中如何求先序

1在线索二叉树中如何求先序、中序的前驱、后继,为什么后续线索二叉树是不完备的?先序前驱:若左标志为1,则左链为线索,指示其前驱;否则a) 若该结点是二叉树的根,则其前驱为空;b) 若该结点是其双亲的左孩子或是其双亲的右孩子且其双亲没有左子树,则其前驱为其双亲;c) 若该结点是其双亲的右孩子且其双亲有左子树,则其前驱为其双亲的左子树中的先序遍历列出的最后一个结点。

先序后继:若右标志为1,则右链为线索,指示其后继;否则,如果有左子树则遍历左子树第一个访问的结点,为其后继;如果没有左子树则遍历右子树第一个访问的结点,为其后继;中序前驱:若左标志为1,则左链为线索,指示其前驱;否则,遍历其左子树最后访问的结点,为其前驱中序后继:若右标志为1,则右链为线索,指示其后继;否则,遍历其右子树第一个访问的结点,为其后继后续后继:a) 若该结点是二叉树的根,则其后继为空;b) 若该结点是其双亲的右孩子或是其双亲的左孩子且其双亲没有右子树,则其后继为其双亲;c) 若该结点是其双亲的左孩子且其双亲有右子树,则其后继为其双亲的右子树中的后序遍历列出的第一个结点。

求后续后继需要知道双亲结点,而二叉链表无法找到双亲,因此不完备:5如果只想得到一个序列中前k(k>=5)个最小元素的部分排序序列,可以采用哪些排序方法,最好采用哪种排序方法?1插入、快速、归并需要全体排序不合适2起泡、简单选择、堆可以。

堆完成查找总时间:4n+klogn,起泡和简单选择总时间kn,因此堆较好。

5荷兰国旗问题分析:这个问题我们可以将这个问题视为一个数组排序问题,这个数组分为前部,中部和后部三个部分,每一个元素(红白蓝分别对应0、1、2)必属于其中之一。

由于红、白、蓝三色小球数量并不一定相同,所以这个三个区域不一定是等分的,也就是说如果我们将整个区域放在[0,1]的区域里,由于三色小球之间数量的比不同(此处假设1:2:2),可能前部为[0,0.2),中部为[0.2,0.6),后部为[0.6,1]。

NOIP初赛复习4二叉树的遍历和性质

NOIP初赛复习4二叉树的遍历和性质

二叉树的遍历(图1)(图2)二叉树的遍历运算(递归定义)(1)先序遍历:根,左子树,右子树根在先例如图1:271653894;图2:ABCKDEHFJG(2)中序遍历:左子树,根,右子树根在中例如图1:175632849;图2:BKCAHEDHFG(3)后序遍历:左子树,右子树,根根在后例如图1:153674982;图2:KCBHEJGFDA题型一:已知其中一些遍历结果,求其他遍历结果题型二:统计n个不同的点可以构造多少棵不同的二叉树?Catalan数=C(n,2*n)/(n+1)题型三:中缀表达式向前缀和后缀表达式的转化每日练习注:题1已知先序和中序,二叉树是唯一的。

题2已知后序和中序,二叉树是唯一的。

题3已知先序和后序,二叉树不是唯一的。

1、已知先序:1243576,中序:2417536,请画出整棵二叉树。

2、已知后序:4526731,中序:4257631,请画出整棵二叉树。

3、已知先序:123456,后序:325641,请画所有二叉树的情况。

4、如果只知道先序abc,画出所有可能二叉树形状,并且计算多少种?5、如果只知道中序abc,画出所有可能二叉树形状,并且计算多少种?6、如果只知道后序abc,画出所有可能二叉树形状,并且计算多少种?往年真题1.一颗二叉树的前序遍历序列是ABCDEFG,后序遍历序列是CBFEGDA,则根结点的左子树的结点个数可能是()。

A.0B.2C.4D.62.表达式a*(b+c)-d的后缀表达式是:A)abcd*+-B)abc+*d-C)abc*+d-D)-+*abcd3.二叉树T,已知其先序遍历是1243576(数字为节点编号,以下同),后序遍历是4275631,则该二叉树的中根遍历是()A.4217536B.2417536C.4217563D.24157364.二叉树T,已知其先根遍历是1243576(数字为结点编号,以下同),中根遍历是2415736,则该二叉树的后根遍历是()A.4257631B.4275631C.7425631D.42765315.已知7个节点的二叉树的先根遍历是1245637(数字为结点的编号,以下同),后根遍历是4652731,则该二叉树的可能的中根遍历是()A.4265173B.4256137C.4231567D.42561736.已知7个节点的二叉树的先根遍历是1245637(数字为节点的编号,以下同),中根遍历是4265173,则该二叉树的后根遍历是()A.4652731B.4652137C.4231547D.46531 727.已知6个结点的二叉树的先根遍历是123456(数字为结点的编号,以下同),后根遍历是325641,则该二叉树的可能的中根遍历是()A.321465B.321546C.231546D.231465二叉树的性质性质1:二叉树第i层上的结点数目最多为。

《数据结构》习题汇编06 第六章 树和二叉树 试题

《数据结构》习题汇编06 第六章 树和二叉树 试题

第六章树和二叉树试题一、单项选择题1.树中所有结点的度等于所有结点数加()。

A. 0B. 1C. -1D. 22.在一棵树中,()没有前驱结点。

A. 分支结点B. 叶结点C. 根结点D. 空结点3.在一棵二叉树的二叉链表中,空指针域数等于非空指针域数加()。

A. 2B. 1C. 0D. -14.在一棵具有n个结点的二叉树中,所有结点的空子树个数等于()。

A. nB. n-1C. n+1D. 2*n5.在一棵具有n个结点的二叉树的第i层上(假定根结点为第0层,i大于等于0而小于等于树的高度),最多具有()个结点。

A. 2iB. 2i+1C. 2i-1D. 2n6.在一棵高度为h(假定根结点的层号为0)的完全二叉树中,所含结点个数不小于()。

A. 2h-1B. 2h+1C. 2h-1D. 2h7.在一棵具有35个结点的完全二叉树中,该树的高度为()。

假定空树的高度为-1。

A. 5B. 6C. 7D. 88.在一棵具有n个结点的完全二叉树中,分支结点的最大编号为()。

假定树根结点的编号为0。

A. ⎣(n-1)/2⎦B. ⎣n/2⎦C. ⎡n/2⎤D. ⎣n/2⎦ -19.在一棵完全二叉树中,若编号为i的结点存在左孩子,则左子女结点的编号为()。

假定根结点的编号为0A. 2iB. 2i-1C. 2i+1D. 2i+210.在一棵完全二叉树中,假定根结点的编号为0,则对于编号为i(i>0)的结点,其双亲结点的编号为()。

A. ⎣(i+1)/2⎦B. ⎣(i-1)/2⎦C. ⎣i/2⎦D. ⎣i/2⎦ -111.在一棵树的左子女-右兄弟表示法中,一个结点的右孩子是该结点的()结点。

A. 兄弟B. 子女C. 祖先D. 子孙12.在一棵树的静态双亲表示中,每个存储结点包含()个域。

A. 1B. 2C. 3D. 413.已知一棵二叉树的广义表表示为a (b (c), d (e ( , g (h) ), f ) ),则该二叉树的高度为A. 3B. 4C. 5D. 614.已知一棵树的边集表示为 {<A, B>, <A, C>, <B, D>, <C, E>, <C, F>, <C, G>, <F, H>,<F, I>},则该树的高度为()。

二叉树的遍历(前序、中序、后序、已知前中序求后序、已知中后序求前序)

二叉树的遍历(前序、中序、后序、已知前中序求后序、已知中后序求前序)

⼆叉树的遍历(前序、中序、后序、已知前中序求后序、已知中后序求前序)之前的⼀篇随笔()只对⼆叉树的遍历进⾏了笼统的描述,这篇随笔重点对前、中、后序的遍历顺序进⾏分析⼆叉树的遍历⼆叉树的深度优先遍历可细分为前序遍历、中序遍历、后序遍历,这三种遍历可以⽤递归实现(本篇随笔主要分析递归实现),也可使⽤⾮递归实现的前序遍历:根节点->左⼦树->右⼦树(根->左->右)中序遍历:左⼦树->根节点->右⼦树(左->根->右)后序遍历:左⼦树->右⼦树->根节点(左->右->根)在进⾏已知两种遍历顺序求另⼀种遍历顺序前,先看⼀下不同遍历顺序对应的代码前序遍历1/* 以递归⽅式前序遍历⼆叉树 */2void PreOrderTraverse(BiTree t, int level)3 {4if (t == NULL)5 {6return ;7 }8 printf("data = %c level = %d\n ", t->data, level);9 PreOrderTraverse(t->lchild, level + 1);10 PreOrderTraverse(t->rchild, level + 1);11 }中序遍历1/* 以递归⽅式中序遍历⼆叉树 */2void PreOrderTraverse(BiTree t, int level)3 {4if (t == NULL)5 {6return ;7 }8 PreOrderTraverse(t->lchild, level + 1);9 printf("data = %c level = %d\n ", t->data, level);10 PreOrderTraverse(t->rchild, level + 1);11 }后序遍历1/* 以递归⽅式后序遍历⼆叉树 */2void PreOrderTraverse(BiTree t, int level)3 {4if (t == NULL)5 {6return ;7 }8 PreOrderTraverse(t->lchild, level + 1);9 PreOrderTraverse(t->rchild, level + 1);10 printf("data = %c level = %d\n ", t->data, level);11 }三种遍历⽅式对应的代码⼏乎相同,只是⼀条语句的位置发⽣了变化printf("data = %c level = %d\n ", t->data, level);只看⽂字和代码来理解遍历的过程是⽐较困难的,建议读者亲⾃去遍历,为了理清遍历的过程下⾯上题(图⽚来源:)前序遍历前序的遍历的特点,根节点->左⼦树->右⼦树,注意看前序的遍历的代码printf语句是放在两条递归语句之前的,所以先访问根节点G,打印G,然后访问左⼦树D,此时左⼦树D⼜作为根节点,打印D,再访问D的左⼦树AA⼜作为根节点,打印A,A没有左⼦树或者右⼦树,函数调⽤结束返回到D节点(此时已经打印出来的有:GDA)D节点的左⼦树已经递归完成,现在递归访问右⼦树F,F作为根节点,打印F,F有左⼦树访问左⼦树E,E作为根节点,打印E,(此时已经打印出来的有:GDAFE),E没有左⼦树和右⼦树,函数递归结束返回F节点,F的左⼦树已经递归完成了,但没有右⼦树,所以函数递归结束,返回D节点,D节点的左⼦树和右⼦树递归全部完成,函数递归结束返回G节点,访问G节点的右⼦树M,M作为根节点,打印M,访问M的左⼦树H,H作为根节点,打印H,(此时已经打印出来的有:GDAFEMH)H没有左⼦树和右⼦树,函数递归结束,返回M节点,M节点的左⼦树已经递归完成,访问右⼦树Z,Z作为根节点,打印Z,Z没有左⼦树和右⼦树,函数递归结束,返回M节点,M节点的左⼦树右⼦树递归全部完成,函数递归结束,返回G节点,G节点的左右⼦树递归全部完成,整个⼆叉树的遍历就结束了(MGJ,终于打完了··)前序遍历结果:GDAFEMHZ总结⼀下前序遍历步骤第⼀步:打印该节点(再三考虑还是把访问根节点这句话去掉了)第⼆步:访问左⼦树,返回到第⼀步(注意:返回到第⼀步的意思是将根节点的左⼦树作为新的根节点,就好⽐图中D是G的左⼦树但是D也是A节点和F节点的根节点)第三步:访问右⼦树,返回到第⼀步第四步:结束递归,返回到上⼀个节点前序遍历的另⼀种表述:(1)访问根节点(2)前序遍历左⼦树(3)前序遍历右⼦树(在完成第2,3步的时候,也是要按照前序遍历⼆叉树的规则完成)前序遍历结果:GDAFEMHZ中序遍历(详细遍历过程就不再赘述了,(┬_┬))中序遍历步骤第⼀步:访问该节点左⼦树第⼆步:若该节点有左⼦树,则返回第⼀步,否则打印该节点第三步:若该节点有右⼦树,则返回第⼀步,否则结束递归并返回上⼀节点(按我⾃⼰理解的中序就是:先左到底,左到不能在左了就停下来并打印该节点,然后返回到该节点的上⼀节点,并打印该节点,然后再访问该节点的右⼦树,再左到不能再左了就停下来)中序遍历的另⼀种表述:(1)中序遍历左⼦树(2)访问根节点(3)中序遍历右⼦树(在完成第1,3步的时候,要按照中序遍历的规则来完成)所以该图的中序遍历为:ADEFGHMZ后序遍历步骤第⼀步:访问左⼦树第⼆步:若该节点有左⼦树,返回第⼀步第三步:若该节点有右⼦树,返回第⼀步,否则打印该节点并返回上⼀节点后序遍历的另⼀种表述:(1)后序遍历左⼦树(2)后序遍历右⼦树(3)访问根节点(在完成1,2步的时候,依然要按照后序遍历的规则来完成)该图的后序遍历为:AEFDHZMG(读者如果在纸上遍历⼆叉树的时候,仍然容易将顺序搞错建议再回去看⼀下三种不同遍历对应的代码)进⼊正题,已知两种遍历结果求另⼀种遍历结果(其实就是重构⼆叉树)第⼀种:已知前序遍历、中序遍历求后序遍历前序遍历:ABCDEF中序遍历:CBDAEF在进⾏分析前读者需要知道不同遍历结果的特点1、前序遍历的第⼀元素是整个⼆叉树的根节点2、中序遍历中根节点的左边的元素是左⼦树,根节点右边的元素是右⼦树3、后序遍历的最后⼀个元素是整个⼆叉树的根节点(如果读者不明⽩上述三个特点,建议再回去看⼀下三种不同遍历对应的代码,并在纸上写出⼀个简单的⼆叉树的三种不同的遍历结果,以加深对三种不同遍历的理解)⽤上⾯这些特点来分析遍历结果,第⼀步:先看前序遍历A肯定是根节点第⼆步:确认了根节点,再来看中序遍历,中序遍历中根节点A的左边是CBD,右边是EF,所有可以确定⼆叉树既有左⼦树⼜有右⼦树第三步:先来分析左⼦树CBD,那么CBD谁来做A的左⼦树呢?这个时候不能直接⽤中序遍历的特点(左->根->右)得出左⼦树应该是这个样⼦因为有两种情况都满⾜中序遍历为CBD⽆法直接根据中序遍历来直接得出左⼦树的结构,这个时候就要返回到前序遍历中去观察前序遍历ABCDEF,左⼦树CBD在前序遍历中的顺序是BCD,意味着B是左⼦树的根节点(这么说可能不太好理解,换个说法就是B是A的左⼦树),得出这个结果是因为如果⼀个⼆叉树的根节点有左⼦树,那么这个左⼦树⼀定在前序遍历中⼀定紧跟着根节点(这个是⽤前序遍历的特点(根->左->右)得出的),到这⾥就可以确认B是左⼦树的根节点第四步:再观察中序遍历CBDAEF,B元素左边是C右边是D,说明B节点既有左⼦树⼜有右⼦树,左右⼦树只有⼀个元素就可以直接确定了,不⽤再返回去观察前序遍历第五步:到这⾥左⼦树的重建就已经完成了,现在重建右⼦树,因为重建右⼦树的过程和左⼦树的过程⼀模⼀样,步骤就不像上⾯写这么细了((┬_┬)),观察中序遍历右⼦树为EF,再观察前序遍历ABCDEF中右⼦树的顺序为EF,所以E为A的右⼦树,再观察中序便利中E只有右边有F,所有F为E的右⼦树,最后得到的⼆叉树是这个样⼦的所有求得的后序遍历为:CDBFEA总结⼀下上述步骤:先观察前序遍历找到根节点->观察中序遍历将根节点左边归为左⼦树元素,右边归为右⼦树元素(可能会出现只有左⼦树或者右⼦树的情况)->观察前序遍历中左\右⼦树⼏个元素的顺序,最靠前的为左\右⼦树的根节点->重复前⾯的步骤第⼆种:已知中序遍历、后序遍历求前序遍历(题还是上⾯这道)中序遍历:CBDAEF后序遍历为:CDBFEA仍然是根据不同遍历⽅式结果的特点来重构⼆叉树,过程很相似这⾥就不详细说了,后序遍历的最后⼀个元素A是根节点,在中序遍历中以根节点A作为分界将元素分为左⼦树(CBD)和右⼦树(EF),再观察后序遍历中左⼦树的顺序是CDB,可以判断出B是左⼦树的根节点(因为后序遍历是:左->右->根),再观察中序遍历,B元素左边是C右边是D,说明B节点既有左⼦树⼜有右⼦树,左右⼦树只有⼀个元素就可以直接确定了,不⽤再返回去观察后序遍历,左⼦树重建完成,现在来看右⼦树,右⼦树有两个元素EF,观察后序遍历E在F的后⾯,所以E是右⼦树的根节点,然后看中序遍历中E只有右边⼀个F元素了,即F是E的右⼦树,此时整个⼆叉树重构完成总结⼀下上述步骤:先观察后序遍历找到根节点->观察中序遍历将根节点左边归为左⼦树元素,右边归为右⼦树元素(可能会出现只有左⼦树或者右⼦树的情况)->观察后序遍历中左\右⼦树⼏个元素的顺序,最靠后的为左\右⼦树的根节点->重复前⾯的步骤注意:已知前序遍历、后序遍历⽆法求出中序遍历(因为由前序后序重构出来的⼆叉树不⽌⼀种)举个栗⼦左图这两种⼆叉树前序(BEFA)和后序(AFEB)⼀样,但对应的中序遍历结果不⼀样(左边的是AFEB右边的是BEFA),所以仅靠前序后序是重构出唯⼀的⼆叉树。

数据结构试题及答案

数据结构试题及答案

一、判断1.带表头节点的双向循环链表为空时,表头的前驱和后继指针指向HEAD。

2.带表头结点的双向链表为空时,表头的前趋和后继指针分别指向NULL。

3.带表头结点的双向循环链表为空时,表头的前驱和后继指针分别指向NULL4.环形链表是线性结构,首尾相连,使用连续地址储存。

5.环形队列是线性结构,但它不是环形,利用特殊的循环算法解决“假溢出”。

6.环形队列是线性结构,象循环链表一样头尾相连接,它能解决“假溢出”。

7.环形队列是线性结构,能利用特殊的循环算法解决“假溢出”。

8.广义表E(a ,E)的表长是2,表深度是无穷大。

9.广义表E(a ,E)的表深度是2,表长是2。

10.广义表G(a ,G)的表深度是2,表长是2。

11.广义表G(a ,G)的深度是2,表长是2。

12.满BT是特殊的BT树,它的定义是递归的。

13.BT是特殊的树,它的定义是递归的。

14.平衡树是特殊的BT树,它的定义是递归的。

15..若已知BT的先根序和中根序、后根序和中根序,可唯一确定一个BT。

16.若已知BT的先根序遍历和后根序遍历,可唯一确定一个BT。

17.平衡BT是特殊的BT,它的定义是递归的。

18.BST是特殊的BT,它的中序遍历是有序的。

19.何时使用PRIM法,何时使用KRUSKAL法取决于图是稀疏还是稠密20.PRIM和KRUSKAL均可以对图求MST,但是PRIM法方便。

21.希尔排序是插入排序的变型,插入排序是稳定的,但希尔排序是不稳定的。

22.希尔排序是插入排序的变型。

插入排序是稳定的,所以希尔排序是稳定的。

23.快速排序的稳定性取决于枢轴的选择。

24.快速排序的枢轴有多种选择方法,取首尾节点是较简单的做法。

25.冒泡排序不但稳定,而且速度很快。

二、名词解释与问答26.线性结构:唯一的首节点,唯一的尾节点,除首尾外其它节点既有前驱也有后继,首无前驱,尾无后继。

27.线性结构中端操作受限的含义是什么?操作仅在指定的位置。

数据结构模拟试题(含答案)

数据结构模拟试题(含答案)

数据结构模拟试题(含答案)一、单选题(共100题,每题1分,共100分)1、在一棵度为3的树中,度为3的结点数为2个,度为2的结点数为1个,度为1的结点数为2个,则度为0的结点数为()个。

A、5B、6C、7D、4正确答案:B2、假设在一棵二叉树中,双分支结点数为15,单分支结点数为30个,则叶子结点数为()个。

A、15B、47C、16D、17正确答案:C3、设某哈夫曼树中有199个结点,则该哈夫曼树中有()个叶子结点。

A、100B、99C、102D、101正确答案:A4、一棵含18个结点的二叉树的高度至少为( )A、5B、4C、6D、3正确答案:A5、有关栈的描述,正确的是()A、栈是一种先进先出的特殊的线性表B、只能从栈顶执行插入、删除操作C、只能从栈顶执行插入、栈底执行删除D、栈顶和栈底均可执行插入、删除操作正确答案:B6、若采用孩子兄弟链表作为树的存储结构,则树的后序遍历应采用二叉树的()A、中序遍历算法B、前序遍历算法C、后序遍历算法D、层次遍历算法正确答案:A7、若要在单链表中的结点*p之后插入一个结点*s,则应执行的语句是( ) typedef struct node { char data[8]; struct node *next; } LinkStrNode;A、s->next=p; p->next=s->next;B、s->next=p->next; p->next=s;C、p->next=s->next; s->next=p;D、p->next=s; s->next=p->next;正确答案:B8、在一个长度为n的顺序表的任一位置插入一个新元素的渐进时间复杂度为( )。

A、O(n)B、O(1)C、O(n2)D、O(n/2)正确答案:A9、执行一趟快速排序能够得到的序列是()。

A、[45,34,12,41] 55 [72,63,27]B、[63,12,34,45,27] 55 [41,72]C、[12,27,45,41] 55 [34,63,72]D、[41,12,34,45,27] 55 [72,63]正确答案:D10、带权有向图G用邻接矩阵A存储,则顶点i 的入度等于A中()。

已知中序遍历,后序遍历,求前序遍历

已知中序遍历,后序遍历,求前序遍历

已知中序遍历,后序遍历,求前序遍历现在知道中序,后序,则再后序遍历中最后⼀个为根节点,然后我们要求的为前序遍历,先输出根节点,然后在中序遍历中找到第⼀个根节点,会将中序遍历分为两⼤部分,就是左右两棵⼦树。

再对应的除去第⼀个根节点后,在后序遍历中根据中序遍历分的两个⼦树,分别对应后序遍历的部分,再在后序遍历中寻找到下⼀个根节点再继续递归。

打个⽐⽅:中序ACGDBHZKX,后序CDGAHXKZB,⾸先可找到主根B;那么我们找到中序遍历中的B,由这种遍历的性质,可将中序遍历分为ACGD和HZKX两棵⼦树,那么对应可找到后序遍历CDGA和HXKZ(从头找即可)从⽽问题就变成求1.中序遍历ACGD,后序遍历CDGA的树 2.中序遍历HZKX,后序遍历HXKZ的树;接着递归,按照原先⽅法,找到1.⼦根A,再分为两棵⼦树2.⼦根Z,再分为两棵⼦树。

代码:#include<cstdio>#include<iostream>#include<cstring>using namespace std;void beford(string in,string after){if (in.size()>0){char ch=after[after.size()-1];cout<<ch;//找根输出int k=in.find(ch);beford(in.substr(0,k),after.substr(0,k));beford(in.substr(k+1),after.substr(k,in.size()-k-1));//递归左右⼦树;}}int main(){string inord,aftord;cin>>inord;cin>>aftord;//读⼊beford(inord,aftord);cout<<endl;return0;}。

考研资料数据结构试题库

考研资料数据结构试题库

考研资料数据结构试题库Test 1⼀、单项选择题(每题2分,共30分)1.若某线性表中最常⽤的操作是取第i个元素和找第i个元素的前趋元素,则采⽤()存储⽅式最节省时间。

A) 单链表 B) 双链表 C) 单向循环链表 D) 顺序表2.串是任意有限个()。

A) 符号构成的序列 B) 符号构成的集合C) 字符构成的序列 D) 字符构成的集合3.设矩阵A的任⼀元素aij(1≤i,j≤10)满⾜:aij≠0;(i≥j,1≤i,j≤10)aij=0;(i现将A的所有⾮0元素以⾏序为主序存放在⾸地址为2000的存储区域中,每个元素占有4个单元,则元素A[9,5]的⾸地址为()。

A) 2340 B) 2336 C)2164 D) 21604.如果以链表作为栈的存储结果,则出栈操作时()。

A) 必须判别栈是否为满 B) 对栈不作任何判别C) 必须判别栈是否为空 D) 判别栈元素的类型5.设数组Data[0..m]作为循环队列SQ的存储空间,front为队头指针,rear为队尾指针,则执⾏出队操作的语句为()。

A) front = front+1 B) front =(front+1) % mC) rear = (rear+1) % m D) front = (front+1) % (m+1)6.深度为6(根的层次为1)的⼆叉树⾄多有()结点。

A) 64 B) 32 C)31 D) 637.将含100个结点的完全⼆叉树从根这⼀层开始,每层上从左到右依次堆结点编号,根结点的编号为1。

编号为49的结点X的双亲的编号为()。

A) 24 B) 25 C)23 D) ⽆法确定8.设有⼀个⽆向图和,如果为的⽣成树,则下⾯不正确的说法是()。

A) 为的⼦图 B) 为的连通分量C) 为的极⼩连通⼦图且 D) 为的⼀个⽆环⼦图9.⽤线性探测法查找闭散列表,可能要探测多个散列地址,这些位置上的键值()。

A) ⼀定都是同义词B) ⼀定都不是同义词C) 多相同D) 不⼀定都是同义词10.⼆分查找要求被查找的表是()。

递归算法

递归算法




问题分析:我们根据给出的样例可知:每次输出的 结果都是由前一次的结果变化而来的,也就是问题 每推进一步其结果仍维持与原问题的关系,可见采 用递归算法比较合适。其算法的大致过程如下: 1、利用循环语句实现对前一次的输出结果从后向 前找一个a[i],使得a[i]到a[w]的字符都在s、t规定的 字母范围内,以确定本次的输出结果。 2、当输出结果达到5个,结束递归;如果没那么多 Jam数字,当第一次被入栈的循环结束时,递归结 束。

上楼梯问题
递归关系: f(1)=1; f(2)=2; f(n)=f(n-1)+f(n-2); (n≥3)

已知:ack(m,n)函数的计算公式如下:
请计算ack(m,n)的值。(m,n<=5)
用递归算法求解两个整数的最大公约数

分析:辗转相除法 。即:两个整数相除,看 其余数是否为0。若余数为0,则除数即为所 求最大公约数;若余数不为0,就将除数作为 被除数,余数作为除数,继续相除,循环往 复,直到余数为0。
数的计算








问题描述 我们要求找出具有下列性质数的个数(包含输入的自然数n): 先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行 处理: 1. 不作任何处理; 2. 在它的左边加上一个自然数,但该自然数不能超过原数的一半; 3. 加上数后,继续按此规则进行处理,直到不能再加自然数为止. 样例: 输入: 6 满足条件的数为 6 (此部分不必输出) 16 26 126 36 136 输出: 6



问题分析:对于这个问题,首先,我们得具备对一 颗二叉树能熟练并且正确写出它的前序、中序、后 序序列的能力,才能编写程序解决问题。 我们根据题中给出的中序及后序序列,可以找出该 树根结点及左右子树。同样对于左右子树,再根据 它们各自的中序及后序序列,又能找出它们的根结 点及它们的左右子树。由此可见,该问题能够被递 归描述。当最后的序列为空时,递归无法再进行下 去,就是递归结束的边界条件。

湖南工业大学数据结构试卷,重点

湖南工业大学数据结构试卷,重点

湖南⼯业⼤学数据结构试卷,重点⼀、单择题1.栈和队列的共同特点是()。

A.只允许在端点处插⼊和删除元素B.都是先进后出C.都是先进先出D.没有共同点2.⼆叉树的第k层的结点数最多为()。

A.2k-1B.2K+1C.2K-1D. 2k-13.数据结构中,从逻辑上可以把数据结构分成( )。

A.动态结构和静态结构B.进凑结构和⾮进凑结构C.线性结构和⾮线性结构D.内部结构和外部结构4.设⼆叉树的先序遍历序列和后序遍历序列正好相反,则该⼆树满⾜的条件是( )。

A.空或只有⼀个结点B.⾼度等于其结点数C.任⼀结点⽆左孩⼦D.任⼀结点⽆右孩⼦5.设顺序线性表中有n个数据元素,则删除表中第i个元素需要移动( )个元素。

A. n-iB. n+l -iC.n-1-iD. i6.判定⼀个栈ST(最多元素为m0)为空的条件是( )。

A.ST→TOP!=0B.ST→TOP==0C.ST→TOP!=m0D.ST→TOP==m07. ⾮空的循环单链表head的尾结点(由P所指向)满⾜( )。

A.p->next=NULLB.p=NULLC.p->next=headD.p=head8.在线性结构中,所有结点都有( )个直接后继。

A.0B.0或1C.1D.不确定9.设数组A[m]作为循环队列sq的存储空间,front为队头指针,rear为队尾指针,则执⾏⼊队操作时修改指针的语句是。

A、sq.front=(sq.front+1)%mB、sq.front=(sq.front+1)%(m+1)C、sq.rear=(sq.rear+1)%mD、sq.rear=(sq.rear+1)%(m+1)⼆、填空题1.已知⼀棵⼆叉树的中序序列和后序序列分别为:DBGEACHF 和DGEBHFCA,则该⼆叉树的前序序列是( )。

2.在( )链表中,从任何⼀结点出发都能访问到表中的所有结点。

3.以下函数的时间复杂度为( )。

fact(int n){if (n<=1)return 1;elsereturn(n*fact(n-1));}4.在线索化⼆叉树中,t所指结点没有左⼦树的充要条件是t->Ltag==( )。

数据结构自考题-4_真题(含答案与解析)-交互

数据结构自考题-4_真题(含答案与解析)-交互

数据结构自考题-4(总分103, 做题时间90分钟)一、单项选择题1.栈一般情况下常采用以下两种存储方式( )A.顺序结构和散列结构B.散列结构和链式结构C.线性结构和非线性结构D.顺序存储结构和链式结构SSS_SIMPLE_SINA B C D分值: 2答案:D2.考虑下列四种排序方法,在排序过程中,关键码比较的次数与记录的初始排列顺序无关的是( )A.直接插入排序和快速排序B.快速排序和归并排序C.直接选择排序和归并排序D.直接插入排序和归并排序SSS_SIMPLE_SINA B C D分值: 2答案:C3.在桶排序中,其平均时间复杂度是( )A.O(1) B.O(n) C.O(n2) D.O(1gn)SSS_SIMPLE_SINA B C D分值: 2答案:B4.链栈与顺序栈相比,有一个比较明显的优点即( )A.插入操作更加方便B.通常不会出现栈满的情况C.不会出现栈空的情况D.删除操作更加方便SSS_SIMPLE_SINA B C D分值: 2答案:B5.二维数组A[10][6]采用行优先的存储方法,若每个元素占4个存储单元,已知元素A[3][4]的存储地址为1000,则元素A[4][3]的存储地址为( )A.1020 B.1024C.1036 D.1240SSS_SIMPLE_SINA B C D分值: 2答案:A[解析] 由题意可知,自A[3][4]的存储地址1000起共存放了5个元素(即A[3][4]、A[3][5]、A[4][0]、A[4][1]和A[4][2])后,才开始存放A[4][3],所以A[4][3]的存储地址为1000+5×4=1020。

6.邻接表存储结构下图的深度优先遍历算法结构类似于于叉树的( ) A.先序遍历B.中序遍历C.后序遍历 D.按层遍历SSS_SIMPLE_SINA B C D分值: 2答案:A7.对采用二分查找法进行查找运算的查找表,要求按( )方式进行存储。

数据结构自考题-4

数据结构自考题-4

数据结构自考题-4(总分:103.00,做题时间:90分钟)一、单项选择题(总题数:14,分数:28.00)1.栈一般情况下常采用以下两种存储方式( )A.顺序结构和散列结构 B.散列结构和链式结构C.线性结构和非线性结构 D.顺序存储结构和链式结构(分数:2.00)A.B.C.D. √解析:2.考虑下列四种排序方法,在排序过程中,关键码比较的次数与记录的初始排列顺序无关的是( ) A.直接插入排序和快速排序 B.快速排序和归并排序C.直接选择排序和归并排序 D.直接插入排序和归并排序(分数:2.00)A.B.C. √D.解析:3.在桶排序中,其平均时间复杂度是( )A.O(1) B.O(n) C.O(n2) D.O(1gn)(分数:2.00)A.B. √C.D.解析:4.链栈与顺序栈相比,有一个比较明显的优点即( )A.插入操作更加方便 B.通常不会出现栈满的情况C.不会出现栈空的情况 D.删除操作更加方便(分数:2.00)A.B. √C.D.解析:5.二维数组A[10][6]采用行优先的存储方法,若每个元素占4个存储单元,已知元素A[3][4]的存储地址为1000,则元素A[4][3]的存储地址为 ( )A.1020 B.1024C.1036 D.1240(分数:2.00)A. √B.C.D.解析:[解析] 由题意可知,自A[3][4]的存储地址1000起共存放了5个元素(即A[3][4]、A[3][5]、A[4][0]、A[4][1]和A[4][2])后,才开始存放A[4][3],所以A[4][3]的存储地址为1000+5×4=1020。

6.邻接表存储结构下图的深度优先遍历算法结构类似于于叉树的( )A.先序遍历 B.中序遍历 C.后序遍历 D.按层遍历(分数:2.00)A. √B.C.D.解析:7.对采用二分查找法进行查找运算的查找表,要求按( )方式进行存储。

A.顺序存储 B.链式存储C.顺序存储且结点按关键字有序 D.链式存储且结点按关键字有序(分数:2.00)A.B.C. √D.解析:8.将上万个一组无序并且互不相等的正整数序列,存放于顺序存储结构中,采用( )方法能够最快地找出其中最大的正整数。

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