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

合集下载

东师《数据结构16秋在线作业1

东师《数据结构16秋在线作业1
2.哈希函数越复杂越好,因为这样随机性好,冲突概率小。
A.错误
B.正确
正确答案:
3.连通图的各边权值均不相同,则该图的最小生成树是唯一的。
A.错误
B.正确
正确答案:
4.一棵哈夫曼树的带权(外部)路径长度等于其中所有分支结点的权值之和。
A.错误
B.正确
正确答案:
5.线性表只能用顺序存储结构实现。
A.错误
C.p->ltag = = 1且p->lchild = = NULL
D.p->ltag = = 0
正确答案:
5.有一个 100*90 的稀疏矩阵,非零元素有 10个,设每个整型数占2字节,则用三元组表 示该矩阵时,所需的字节数是()。
A.60
B.66
C.18000
D.33正确答案:
6.一个队列的入队序列是a、b、c、d,则队列的输出序列是 ()。
A.错误
B.正确
正确答案:
6.数据的逻辑结构说明数据元素之间的顺序关系,它依赖于计算机的存储结构。
A.错误
B.正确
正确答案:
7.哈希表 (散列表 )的平均查找长度与处理冲突的方法无关。
A.错误
B.正确
正确答案:
8.顺序存储结构的主要缺点是不利于插入、删除操作。
A.错误
B.正确
正确答案:
9.二叉树中序线索化后,不存在空指针域。
A.错误
B.正确
正确答案:
17.二叉树的中序遍历序列中,任意一个结点均处在其右子女结点(若存在 )的前面。A.错误
B.正确 正确答案:
18.数据的存储 (物理 )结构是指数据在计算机内的实际存储形式。A.错误
B.正确 正确答案:

国家开放大学电大《数据结构》网络课形考任务3作业及答案

国家开放大学电大《数据结构》网络课形考任务3作业及答案

国家开放大学电大《数据结构》网络课形考任务3作业及答案形考任务3一、单项选择题(每小题2分,共38分)题目1假定一棵二叉树中,双分支结点数为15,单分支结点数为30,则叶子结点数为()。

选择一项:B. 16题目2二叉树第k层上最多有()个结点。

选择一项:A. 2k-1题目3将含有150个结点的完全二叉树从根这一层开始,每一层从左到右依次对结点进行编号,根结点的编号为1,则编号为69的结点的双亲结点的编号为()。

选择一项:C. 34题目4如果将给定的一组数据作为叶子数值,所构造出的二叉树的带权路径长度最小,则该树称为()。

选择一项:B. 哈夫曼树题目5在一棵度具有5层的满二叉树中结点总数为()。

选择一项:C. 31题目6一棵完全二叉树共有6层,且第6层上有6个结点,该树共有()个结点。

选择一项:B. 37题目7利用3、6、8、12这四个值作为叶子结点的权,生成一棵哈夫曼树,该树中所有叶子结点中的最长带权路径长度为()。

选择一项:A. 18在一棵树中,()没有前驱结点。

选择一项:A. 树根结点题目9设一棵采用链式存储的二叉树,除叶结点外每个结点度数都为2,该树结点中共有20个指针域为空,则该树有()个叶结点。

选择一项:B. 10题目10在一个图G中,所有顶点的度数之和等于所有边数之和的()倍。

选择一项:A. 2题目11邻接表是图的一种()。

选择一项:A. 链式存储结构题目12图的深度优先遍历算法类似于二叉树的()遍历。

选择一项:A. 先序题目13已知下图所示的一个图,若从顶点V1出发,按深度优先搜索法进行遍历,则可能得到的一种顶点序列为()。

选择一项:D. V1V2V4V8V5V3V6V7题目14已知如下图所示的一个图,若从顶点a出发,按广度优先搜索法进行遍历,则可能得到的一种顶点序列为()。

选择一项:D. aecbdf题目15图状结构中数据元素的位置之间存在()的关系。

选择一项:B. 多对多在一棵二叉树中,若编号为i的结点存在右孩子,则右孩子的顺序编号为()。

2016年考研核心题型【数据结构部分】【第4章 树与二叉树】

2016年考研核心题型【数据结构部分】【第4章 树与二叉树】

其余的 b 和 c 结点都各有一个前驱结点和后继结点。
那么,将 d 右指针域(初始为空)调整并指向其后继结点 b。将 b 结点的左指针域调整
指向其前驱结点 d,因为 b 的右指针域不为空,所以线索化过程中不需要调整。c 的左右指
针域都为空,令其左指针域指向其前驱结点 b,右指针域指向其后继结点 a。
有在已知前序遍历序列或者后序遍历序列的情况下,又知道中序遍历序列,才能唯一确定
一棵二叉树。
遍历一棵二叉树,要使得前序遍历序列和后序遍历序列刚好相反,那么必须保证每一
个结点都只有一个孩子结点。故而,二叉树的高度为 4。那么,在前序遍历序列为 1、2、3、
4,后序遍历序列为 4、3、2、1 的情况下,该二叉树第 1、2、3、4 层的结点依次为 1、2、
【解析】对于某一种遍历顺序对应的线索化,只需写出对应的遍历序列,然后修改空
指针域分别指向该遍历序列的前驱和后继即可。例如,本题中的二叉树的后序遍历可得到
序列 d、b、c、a。那么,d 是第一个元素,没有前驱,所以其左指针域原来为空,线索化时
亦为空;a 是最后一个元素,但是其左右孩子都不为空,所以不需要考虑该结点的线索化;
24
13
53
37
90
48
图 4.4 插入新的结点 48 之后,我们沿着叶子结点 48 往根节点的路径上,查找第一个不平衡 的结点。显然,24 是第一个不平衡的结点,其左子树的高度为 1,右子树的高度为 3。图中 的粗线部分,即需要旋转的部分。 那么,造成了什么类型的不平衡呢?我们这样判断:53 是 24 右孩子(R),37 是 24 的左孩子(L),所以是 RL 型不平衡。于是,先把结点 24 的右孩子 53 的左孩子 37 向右上 方旋转到原来 53 的位置,再将 37 向左上旋转到 24 的位置,24 被旋转下来。成了如图 4.5 所示的样子。

数据结构试题(含答案)讲解

数据结构试题(含答案)讲解

数据结构试题一、单选题1、在数据结构的讨论中把数据结构从逻辑上分为(C )A 内部结构与外部结构B 静态结构与动态结构C 线性结构与非线性结构D 紧凑结构与非紧凑结构。

2、采用线性链表表示一个向量时,要求占用的存储空间地址(D )A 必须是连续的B 部分地址必须是连续的C 一定是不连续的D 可连续可不连续3、采用顺序搜索方法查找长度为n的顺序表时,搜索成功的平均搜索长度为( D )。

A nB n/2C (n-1)/2D (n+1)/24、在一个单链表中,若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 80B 100C 240D 2708、将一个递归算法改为对应的非递归算法时,通常需要使用( A )。

A 栈B 队列C 循环队列D 优先队列9、一个队列的进队列顺序是1, 2, 3, 4,则出队列顺序为( C )。

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

A ( front - rear + 1) % mB ( rear - front + 1) % mC ( front - rear + m) % mD ( rear - front + m) % m11、一个数组元素a[i]与( A )的表示等价。

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

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

习题六树和二叉树一、单项选择题1.以下说法错误的是()A.树形结构的特点是一个结点可以有多个直接前趋B.线性结构中的一个结点至多只有一个直接后继C.树形结构可以表达(组织)更复杂的数据D.树(及一切树形结构)是一种”分支层次”结构E.任何只含一个结点的集合是一棵树2.下列说法中正确的是()A.任何一棵二叉树中至少有一个结点的度为 2B.任何一棵二叉树中每个结点的度都为 2C.任何一棵二叉树中的度肯定等于 2D.任何一棵二叉树中的度可以小于 23.讨论树、森林和二叉树的关系,目的是为了()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+M37.一棵完全二叉树上有1001个结点,其中叶子结点的个数是()A.250 B .500 C .254 D .505 E .以上答案都不对8.设给定权值总数有n 个,其哈夫曼树的结点总数为()A.不确定 B . 2n C . 2n+1 D . 2n-19.二叉树的第I层上最多含有结点数为()I I-1 I-1 IA.2I B .2I-1-1 C .2I-1D .2I-110.一棵二叉树高度为h, 所有结点的度或为0,或为2,则这棵二叉树最少有()结点A.2h B .2h-1 C .2h+1 D .h+111.利用二叉链表存储树,则根结点的右指针是()。

数据结构答案第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的结点。

则该树中有()个叶子结点。

【解答】12【分析】根据二叉树性质3的证明过程,有n0=n2+2n3+1(n0、n2、n3分别为叶子结点、度为2的结点和度为3的结点的个数)。

⑻某二叉树的前序遍历序列是ABCDEFG,中序遍历序列是CBDAFGE,则其后序遍历序列是()。

【解答】CDBGFEA【分析】根据前序遍历序列和后序遍历序列将该二叉树构造出来。

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

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

武汉大学数据结构考试题(附答案)编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望(武汉大学数据结构考试题(附答案))的内容能够给您的工作和学习带来便利。

同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为武汉大学数据结构考试题(附答案)的全部内容。

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. 1203. 一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是( C )A。

edcbaB 。

decba C. dceab D. abcde4。

循环队列用数组A[0,m-1]存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是( D )A. (rear-front+m)%m B .read—front+1C. read-front—1 D. read—front5.不带头结点的单链表head为空的判定条件是( A )A. head=NULL B .head—next=NULLC. head-next=head D。

head!=NULL6.在一个单链表中,若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。

数据结构含答案

数据结构含答案

数据构造综合练习一、选择题1.数据的存储构造包括顺序、、散列和〔〕4种根本类型。

A索引 B数组 C集合 D向量2.下面程序的时间复杂性的量级为〔〕。

int i=0,s1=0,s2=0;while〔i++<n〕{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<m;i++)for(int j=0;j<n;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-iB.n-i+lC.n-i-lD.i5.在一个长度为n的顺序存储构造的线性表中,删除第i个元素〔1≤i≤n+1〕时,需要从前向后依次后移〔〕个元素。

A.n-iB.n-i+lC.n-i-lD.i6.在一个长度为n的线性表中,删除值为*的元素时需要比拟元素和移动元素的总次数为〔〕。

A.(n+1)/2B.n/2C.nD.n+17.在一个顺序表中的任何位置插入一个元素的时间复杂度为〔〕。

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指向的结点,则应执行〔〕操作。

A. ph=p; p->ne*t=ph;B. p->ne*t=ph; ph=p;C. p->ne*t=ph; p=ph;D. p->ne*t=ph->ne*t; ph->ne*t=p;11. 在一个表头指针为ph的单链表中,假设要在指针q所指结点的后面插入一个由指针p 所指向的结点,则执行〔〕操作。

  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.测试结果
以题目中的数据为例,所测得结果如下:
同时测试了其他几组数据,结果均正确,在这不再上图。

相关文档
最新文档