兰州大学网络教育学院 数据结构命题作业 二叉树

合集下载

数据结构树和二叉树习题

数据结构树和二叉树习题

数据结构树和二叉树习题一、树的基本概念1.请简要描述树的基本概念及其特点。

答:树是由n(n≥0)个节点组成的有限集合。

其中:-若n=0,则为空树。

-若n>0,则树有且仅有一个称为根的节点,其他节点可以分为多个互不相交的有限集合,每个集合本身又是一棵树,称之为根的子树。

树的特点包括:-每个节点存放的数据可以是同种或不同种的数据类型。

-每个节点最多有一个父节点和多个子节点。

2.请列举树的应用场景。

答:树的应用场景包括但不限于以下几个方面:-文件系统:操作系统中的文件系统通常使用树来组织文件和目录。

-数据库:数据库中的索引通常使用树来存储和组织数据。

-编译原理:编译器使用语法树来解析源代码。

-社交网络:社交网络中的关注和粉丝关系可以表示为树。

二、二叉树3.请定义二叉树。

答:二叉树是一种特殊的树结构,其中每个节点最多有两个子节点,分别称为左子节点和右子节点。

4.请画出以下二叉树的结构图:A/\BC/\/\DEFG答:以下是该二叉树的结构图:A/\BC/\/\DEFG5.请写出以下二叉树的前序遍历、中序遍历和后序遍历结果:/\23/\45答:-前序遍历结果:1,2,4,5,3-中序遍历结果:4,2,5,1,3-后序遍历结果:4,5,2,3,1三、二叉树的操作6.请实现二叉树的插入操作。

答:以下是二叉树的插入操作的示例代码:```class Node:def __init__(self, value):self.value = valueself.left = Noneself.right = Nonedef insert(root, value):if root is None:root = Node(value)else:if value < root.value:if root.left is None:root.left = Node(value)else:insert(root.left, value)else:if root.right is None:root.right = Node(value)else:insert(root.right, value)```7.请实现二叉树的查找操作。

兰州大学智慧树知到“计算机科学与技术”《数据结构》网课测试题答案卷2

兰州大学智慧树知到“计算机科学与技术”《数据结构》网课测试题答案卷2

兰州大学智慧树知到“计算机科学与技术”《数据结构》网课测试题答案(图片大小可自由调整)第1卷一.综合考核(共10题)1.链表不具备的特点是()。

A.可随机访问任意一个结点B.插入和删除不需要移动任何元素C.不必事先估计存储空间D.所需空间与其长度成正比2.如果只想得到1000个元素组成的序列中第5个最小元素之前的部分排序的序列,用()方法最快。

A、起泡排序B、快速排列C、Shell排序D、堆排序E、单单选择排序3.在数据结构中,图形结构中元素之间存在()关系。

A.一对一B.一对多C.多对一D.多对多4.设某完全无向图中有n个顶点,则该完全无向图中有()条边。

A、n(n-1)/2B、n(n-1)C、n²D、n²-15.满二叉树一定是完全二叉树,完全二叉树不一定是满二叉树。

()A.正确B.错误6.哈希表不需要进行比较便可以直接取得所查记录。

()A.正确B.错误7.可以用队列实现数值转换算法。

()A.正确B.错误8.中序遍历的递归算法平均空间复杂度为()。

A.2(n)B.n(2)C.0(n)D.2n9.冒泡排序在初始关键字序列为逆序的情况下执行的交换次数最多。

()A.正确B.错误10.如何知道循环队列是空还是满?第1卷参考答案一.综合考核1.参考答案:A2.参考答案:D3.参考答案:D4.参考答案:A5.参考答案:A6.参考答案:A7.参考答案:A8.参考答案:C9.参考答案:A10.参考答案:采用循环队列是解决假溢出的途径。

另外,解决队满队空的办法有三:(1)设置一个布尔变量以区别队满还是队空;(2)浪费一个元素的空间,用于区别队满还是队空;(3)使用一个计数器记录队列中元素个数(即队列长度)。

我们常采用方法(2),即队头指针、队尾指针中有一个指向实元素,而另一个指向空闲元素。

判断循环队列队空标志是:f=rear;队满标志是:f=(r+1)%N。

兰州大学数据结构中二叉树的的存储、遍历、交换子树、统计二叉树的深度

兰州大学数据结构中二叉树的的存储、遍历、交换子树、统计二叉树的深度

要求:二叉树以lson-rson链接方式存储,以菜单方式设计并完成功能任务:建立并存储树、输出前序遍历结果、输出中序遍历结果、输出后序遍历结果、交换左右子树、统计高度,其中对于中序、后序的遍历运算要求采用非递归方式。

代码利用C语言描述。

exit(1);//溢出错误T->data=ch;T->lson=CreatTree(T->lson);T->rson=CreatTree(T->rson);}return T;}void PreorderTraverse(struct Node *T)//递归前序遍历{if(T==NULL)return;else{printf("%c ",T->data);PreorderTraverse(T->lson);PreorderTraverse(T->rson);}}void InOrder(struct Node* T)//非递归中序遍历{struct Node *stack[10], *p;int top = -1;if (T!= NULL){p = T;while (top > -1 || p != NULL){// 扫描p的所有左节点并入栈while (p != NULL){top++;stack[top] = p;p = p->lson;}if (top > -1){// 出栈并访问该节点p = stack[top];top--;printf("%c ", p->data);//扫描p的右孩子*/p = p->rson;}}printf("\n");}}// 非递归后序遍历二叉树void PostOrder(struct Node* T) {struct Node *stack[10], *p;int sign, top = -1;if (T != NULL){do{//T所有左节点入栈while (T != NULL){top++;stack[top] = T;T = T->lson;}//p指向栈顶前一个已访问节点p = NULL;// 置T为已访问sign = 1;while (top != -1 && sign){// 取出栈顶节点T = stack[top];//右孩子不存在或右孩子已访问则访问Tif (T->rson == p){printf("%c ", T->data);top--;//p指向被访问的节点p = T;}else{// T指向右孩子节点T = T->rson;//置未访问标记sign = 0;}}}while (top != -1);printf("\n");}}void exchange(struct Node*T)//交换左右子树{if(T==NULL)return;struct Node *x;x=T->lson;T->lson=T->rson;T->rson=x;//完成交换过程exchange(T->lson);exchange(T->rson);}int high(struct Node *T){int lh, rh;if(T==NULL)return 0;else{lh=high(T->lson);rh=high(T->rson);if(lh>rh)return lh+1;elsereturn rh+1;}}void UI()//用户界面{printf("\n\n\n\n");printf("**************************************************************\n");printf("* *\n");printf("* 请选择菜单功能选项前的序号*\n");printf("* *\n");printf("**************************************************************\n");printf("1.建立并存储树\n2.输出前序遍历结果\n3.输出中序遍历结果\n");printf("4.输出后序遍历结果\n5.交换左右子树\n6.统计高度\n7.退出程序\n\n\n"); printf("请选择输入1-7\n");}void menu()//菜单{UI();int c;char b;//用于读取输入过程中的回车符while (1){scanf("%d",&c);if(c==7)break;switch(c){case 1:printf("你选择的是1.建立并存储树\n请以前序遍历的顺序输入:\n");scanf("%c",&b);T=CreatTree(T);printf("\n二叉树已经建立并存储完成\n");UI();break;case 2:printf("你选择的是2.输出前序遍历结果\n");scanf("%c",&b);PreorderTraverse(T);UI();break;case 3:printf("你选择的是3.输出中序遍历结果\n"); InOrder(T);UI();break;case 4:printf("你选择的是4.输出后序遍历结果\n"); PostOrder(T);UI();break;case 5:printf("您选择的是5.交换左右子树\n");scanf("%c",&b);exchange(T);printf("\n已经完成了二叉树左右子树的交换\n"); UI();break;case 6:printf("您的选择是6.求二叉树的高度\n");int h=high(T);printf("二叉树的高度是%d\n",h);UI();break;}}。

兰州大学《数据结构》15秋在线作业1满分答案

兰州大学《数据结构》15秋在线作业1满分答案

兰州大学《数据结构》15秋在线作业1满分答案一、单选题(共 10 道试题,共 50 分。

)1. 数据结构是一门研究非数值的程序设计问题中计算机的? 以及它们之间的关系和运算等的学科A. 操作对象B. 计算方法C. 逻辑存储D. 物理存储正确答案:A2. 一个二叉树的第i层至多有____ 个节点A. 2^iB. 2^i-1C. 2^(i-1)D. 2^(i-1)-1正确答案:C3. 单链表的结点包含____和_____A. 结点域,符号域B. 数据域,符号域C. 结点域,指针域D. 数据域,指针域正确答案:D4. 设s =“I AM A STUDENT”,则字符串的长度 Length(s) =?A. 11B. 12C. 14D. 15正确答案:C5. 若在任意一棵二叉树中,有n0个叶子结点,有n2个度为2的结点,则:n0=_____A. n2+1B. n2-1C. n2+2D. n2-2正确答案:A6. 常对数组进行的两种基本操作是A. 建立与删除B. 索引与修改C. 查找与修改D. 查找与索引正确答案:C7. for (j=1## j<=n## ++j) s=s+1##A. O(n)B. O(1)C. O(n^2)D. O(n^3)正确答案:A8. 图的深度优先遍历算法类似于二叉树的____A. 先序遍历B. 中序遍历C. 后序遍历D. 层次遍历正确答案:A9. 线性表的顺序存储结构是一种?的存储结构A. 随机存取B. 顺序存取C. 索引存取D. 散列存取正确答案:A10. 折半查找适用于:_____A. 采用顺序存储结构的有序表B. 采用链式存储结构的有序表C. 采用顺序存储结构的无序表D. 采用链式存储结构的无序表正确答案:A《数据结构》15秋在线作业1二、判断题(共 10 道试题,共 50 分。

)1. 算法和程序没有区别A. 错误B. 正确正确答案:A2. 栈是限定在表尾进行插入或删除操作的线性表A. 错误B. 正确正确答案:B3. 对于哈希函数,冲突只能尽可能得少,不可能完全避免A. 错误B. 正确正确答案:B4. 数据元素是数据的最小单位A. 错误B. 正确正确答案:A5. 哈夫曼树是带权路径长度最短的树A. 错误B. 正确正确答案:B6. 平衡二叉树的平衡因子只可能是-1、0、1A. 错误B. 正确正确答案:B7. 一个广义表的表头总是一个广义表A. 错误B. 正确正确答案:A8. 数据的逻辑结构是指各数据元素之间的逻辑关系A. 错误B. 正确正确答案:B9. 线性结构的链式存储结构在插入或删除某一元素时,不需要移动大量元素A. 错误B. 正确正确答案:B10. 森林的先序遍历与其对应的二叉树的中序遍历对应A. 错误B. 正确正确答案:A。

数据结构书面作业练习题

数据结构书面作业练习题

习 题 六 树 和 二 叉 树 单项选择题1. 如图所示的4棵二叉树,_C ___不是完全二叉树。

2. 如图所示的4棵二叉树,__B_是平衡二叉树。

3. 在线索化二叉树中,t 所指结点没有左子树的充要条件是B __。

A. t —>left=NULLB. t —>ltag=1(A)(B)(C)(D)图8.7 4棵二叉树(A)(B)图8.8 4棵二叉树C. t—>ltag=1且t—>left=NULLD. 以上都不对4. 二叉树按某种顺序线索化后,任一结点均有指向其前驱和后续的线索,这种说法_B__。

A. 正确B. 错误5. 二叉树的前序遍历序列中,任意一个结点均处在其子女结点的前面,这种说法__A__。

A. 正确B. 错误6. 由于二叉树中每个结点的度最大为2,所以二叉树是一种特殊的树,这种说法___B_。

A. 正确B. 错误7. 设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为__B__。

A. 2hB. 2h-1C. 2h+1D. h+1 a8. 如图所示二叉树的中序遍历序列___B_。

图8.9 一棵二叉树A. abcdgefB. dfebagcC. dbaefcgD. defbagc9. 已知某二叉树的后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是D____。

A. acbedB. decabC. deabcD. cedba10.设a,b为一棵二叉树上的两个结点,在中序遍历时,a在b前的条件是 B 。

A.a在b的右方B.a在b的左方C.a是b的祖先D.a是b的子孙11. 假定在一棵二叉树中,双分支结点数为15,单分支结点数为30个,则叶子结点数为个。

BA.15 B.16 C.17 D.4712.某二叉树的前序遍历结点访问顺序是abdgcefh,中序遍历的结点访问顺序是dgbaechf,则其后序遍历的结点访问顺序是D___ _。

A. bdgcefhaB. gdbecfhaC. bdgaechfD. gdbehfca13. 二叉树为二叉排序树的充分必要条件是其任一结点的值均大于其左孩子的值、小于其右孩子的值。

2003年甘肃兰州大学数据结构(含操作系统)考研真题

2003年甘肃兰州大学数据结构(含操作系统)考研真题

2003年甘肃兰州大学数据结构(含操作系统)考研真题【数据结构部分(90分)】一、解释下列术语(每小题4分,共20分)∶1、时间复杂性2、模式匹配3、地址向量4、碰撞5、倒排文件二、求解以下问题∶(共50分)1、数组 A【-3…10,812,6…15】采用行优先存储法,现假设基地址为100,每个元素占用2个存储单元,请计算数组A的虚拟地址值。

(5分)2、对于图(a)所示森林,将其转换为二叉树,给出转换后的二叉树图示,并写出得到的二叉树的中序遍历结果及中序线索树图示。

(10分)3、若有关键字序列(6,2,1,4,5,3,7)请构造一棵AVL树(要求画出每步状│态变迁图示),并计算在等概率情况下该AVL树的平均检索长度。

(9分)4、已知无向图G的邻接矩阵如图(b)所示;请画出其所有的连通分量的图示。

(6分》5、利用Djista方法求最短路径时需要引入一个辅助向量D用以记录找到的最短路径长度。

对于图(c)所示的有向图,给出其邻接矩阵,求从顶点1出发分别到达其它各顶点的最短路径,并写出运算过程中D向量的变化状况。

(12分)6、对于图(d)所示的三阶B树,请画出插入关键字R后的结果图示。

(4分)7、已知关键字的初始序列为(34,21,65.24,77,32,44),请给出利用快速排序法对其进行第一趟快排的排序过程示意图。

(4分)三、算法设计(算法描述语言采用类C或者类Pascal。

需说明所用语言,对所用存储结构需给出形式化说明,算法关键地方需加注解。

每个小题10分,共20分。

)【操作系觥部分(60分〕】四、名词解释(每小题2分,共10分)1、重定位2、管程3、多道程序设计技术4文件系统5、虚拟五、简答(每小题4分,共20分)1、下图(e)中一个进程状态转换的发生,是否会导致另一个转换的发生。

列出两种可能,并给出相应的条件。

2、简述引入线程的好处。

3、常见的文件物理结构有几种,各有何优缺点。

4、VO控制方式有几种。

数据结构作业——二叉树[修改版]

数据结构作业——二叉树[修改版]

第一篇:数据结构作业——二叉树数据结构实验报告二题目:用先序递归过程监理二叉树(存储结构:二叉链表)输入数据按先序遍历输入,当某节点左子树或者右子树为空时,输入‘*’号,如输入abc**d**e**时,得到的二叉树为:并用如下实力测试:算法思路:显然,建立一个二叉链表存储的二叉树,如果不考虑效率要求,考虑到程序的简介性,递归建立和递归遍历是一种很好的办法。

利用C++的类模板的方法实现建立,遍历,输出等二叉树操作。

首先利用构造函数实现先序遍历建立二叉树,然后调用类模板中已经声明好的四种遍历函数,将遍历结果输出,检验建立好的二叉树是否为要求的二叉树。

初始化:利用构造函数建立二叉树。

采用先序递归的调用方法,构造函数主体如下:template BiTree::BiTree( ) { this->root = Creat( );//利用this指针调用creat函数}template BiNode* BiTree::Creat()//定义构造函数{ BiNode* root; T aa; cout>aa; if (aa=="*") root = NULL; else{root = new BiNode;//生成一个结点root->data=aa;root->lchild = Creat();//递归建立左子树root->rchild = Creat();//递归建立右子树} return root; } 构造这样的函数,可以在输入时,按先序遍历顺序每次输入一个节点的数据,可以实现任意二叉树的构造。

为了检验构造的二叉树是否为预先设想的二叉树,需要遍历二叉树并进行输出。

考虑到单一的输出并不能确定唯一的二叉树,因此对遍历二叉树的四种常用发方法,即先序遍历,中序遍历,后续遍历,层次遍历分别实现,通过遍历结果检验构造的二叉树是否为预先设计好的二叉树。

先序遍历:采用递归的方法建立。

2021数据结构作业3 树与二叉树 参考答案

2021数据结构作业3 树与二叉树 参考答案

2021数据结构作业3 树与二叉树参考答案2021数据结构作业3-树与二叉树-参考答案作业3.树非编程作业:1.请分别画出具有3个结点的树和3个结点的二叉树的所有不同形态。

参考答案:具备3个结点的树:具有3个结点的二叉树:2.未知二叉树的先序结点序列就是eabdcfhgikj,中序结点序列就是abcdefghijk,请构造二叉树,并写出其层次遍历序列和后序遍历序列。

参考答案:eaf层次:eafbhdgickjbh后序---cdbagjkihfedcgikj3.将下图所示的森林转换成一棵二叉树。

agkbcdhijlef参考答案:转换成的二叉树为:abcdghikljef4.将下图所示的二叉树还原成树或森林。

abcdlfeghmknji参考答案:切换为森林:aegbcdfhijlmnk5.假设用于通信的电文由7个字母组成{a,b,c,d,e,f,g},字母在电文中出现的频率分别为0.17、0.09、0.12、0.06、0.32、0.03、0.21。

精义这7个字母设计哈夫曼编码,并排序其有向路径长度wpl。

参考答案:哈夫曼树为:0.1810.39g0.610.210.290.32e0.17a0.090.09b0.12wpl=4*(0.03+0.06)+3*(0.12+0.17+0.09)+2*(0.32+0.21)=2.56a:101b:001c:100d:0001e: 11f:0000g:01编程作业:二叉树采用二叉链表存储,试设计算法实现:1.createbt(bitree&t):从键盘输入二叉树的先序结点序列字符串(以”#”代表空结点),创建其二叉链表;如输入:ab#d##ce#f###则建立如下图所示二叉树的二叉链表2.exchangebt(bitreet):设计递归算法实现二叉树中所有结点的左右孩子交换;3.countleaf(bitreet,telemtypex,int&count):统计数据以值x的结点为根的子树中叶子结点的数目;4.dispbitree(bitreet,intlevel):按树状打印二叉树。

二叉树问题数据结构设计

二叉树问题数据结构设计

二叉树问题数据结构设计摘要本文档将介绍二叉树问题的数据结构设计。

首先,我们将对二叉树的基本概念和特性进行简要说明。

然后,我们将介绍如何使用Py t ho n语言实现二叉树,并提供一些常见的二叉树问题的解决方法和相关代码示例。

1.引言二叉树是一种常用的数据结构,它由节点和连接节点的边组成,每个节点最多可以有两个子节点。

在计算机科学中,二叉树被广泛应用于搜索算法、排序算法、图像处理和网络通信等领域。

2.二叉树基本概念2.1节点二叉树中的节点是树的基本元素,它包含存储数据的值和指向其左右子节点的指针。

2.2父节点和子节点父节点是指向子节点的节点,子节点是从父节点指向的节点。

2.3根节点和叶节点根节点是树的顶部节点,它没有父节点。

叶节点是没有子节点的节点。

2.4二叉树的属性-二叉树的每个节点最多有两个子节点;-左子节点小于等于父节点,右子节点大于等于父节点;-二叉树可以为空。

3.二叉树的设计与实现在P yt ho n中,我们可以使用面向对象编程的方式来设计二叉树的数据结构,并通过一些基本操作来实现二叉树的各种功能。

以下是一个简单的二叉树类的代码示例:c l as sB in ar yT re eNod e:d e f__i ni t__(se lf,d at a):s e lf.d at a=da tas e lf.l ef t=No nes e lf.r ig ht=N on e4.常见的二叉树问题及解决方法4.1二叉树的遍历二叉树的遍历是指按照某种规定的顺序访问二叉树的所有节点。

常见的遍历方法包括先序遍历、中序遍历和后序遍历。

-先序遍历:根节点->左子树->右子树-中序遍历:左子树->根节点->右子树-后序遍历:左子树->右子树->根节点4.2二叉树的搜索二叉树的搜索是指在二叉树中查找某个特定值的节点。

常见的搜索方法包括深度优先搜索(D FS)和广度优先搜索(B FS)。

兰州大学《数据结构》2020年11月考试在线考核试题参考答案.doc

兰州大学《数据结构》2020年11月考试在线考核试题参考答案.doc

奥鹏兰州大学 2020年11月考试在线考核试题参考答案 11192553751.设有两个串p和q,求q和p中首次出项的位置的运算称作()A.连接B.模式匹配C.求子串D.求串长【参考答案】: B2.静态链表中指针表示的是()A.内存地址B.数组下标C.下一元素地址D.左、右孩子地址【参考答案】: C3.以下与数据的存储结构无关的术语是()A.循环队列B.链表C.哈希表D.栈【参考答案】: D4.一个连通图的___是一个极小连通子图。

A.有向图B.无向图C.生成树D.树【参考答案】: C5.如果只想得到1000个元素组成的序列中第5个最小元素之前的部分排序的序列,用()方法最快A.起泡排序B.快速排列C.Shell排序D.堆排序E.简单选择排序【参考答案】: D6.具有线性结构的数据结构是()。

A.图B.树C.广义表D.栈【参考答案】: D7.下述几种排序方法中,平均查找长度最小的是().A.插入排序B.选择排序C.快速排序D.归并排序【参考答案】: C8.设G为具有N个顶点的无向连通图,则G中至少有___条边。

A.n1B.nC.n-1D.n(n-1)/2【参考答案】: C9.数据结构是一门研究?的程序设计问题中计算机的操作对象以及它们之间的关系和运算等的学科A.数值B.非数值C.字符D.数字【参考答案】: B10.一个栈的入栈序列是A、B、C、E、D,五个元素都入栈后,首次出栈的元素是()。

A.AB.EC.BD.D【参考答案】: D11.数据的物理结构是指数据在计算机内的实际的存储形式A.错误B.正确【参考答案】: B12.对于哈希函数,冲突只能尽可能得少,不可能完全避免A.错误B.正确【参考答案】: B13.如果两个关键字的值不等但哈希函数值相等,则称这两个关键字为同义词。

()A.正确B.错误【参考答案】: A14.空串与空格串没有区别。

()A.正确B.错误【参考答案】: A15.常用的图的遍历方法有深度优先遍历和广度优先遍历A.错误B.正确【参考答案】: B16.已知一棵二叉树的前序遍历的结果序列是ABECKFGHIJ,中序遍历的结果是EBCDAFHIGJ,试写出这棵二叉树的后序遍历结果。

数据结构-兰州大学201303考试

数据结构-兰州大学201303考试

数据结构-兰州大学201303考试2012-2013学年第一学期数据结构问题答疑导学资料1、无向网有6个顶点V1--V6,10条边分别为(V1,V2)=5,(V1,V3)=1,(V1,V4)=2,(V2,V3)=8,(V2,V5)=3,(V3,V4)=5,(V3,V5)=6,(V3,V6)=4,(V4,V6)=6,(V5,V6)=6,该图的最小生成树的边有选项:a、(V1,V2)=5b、(V1,V3)=1c、(V1,V4)=2d、(V2,V5)=3e、(V3,V6)=4解答:一个有n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有n 个结点,并且有保持图联通的最少的边。

常用的求最小生成树的算法是普利姆算法。

该图的最小生成树的边有(V1,V2)=5(V1,V3)=1(V1,V4)=2(V2,V5)=3(V3,V6)=42、数组与线性表叙述正确的是选项:a、它们都是若干个相同数据类型的数度优先遍历据元素a0,a1,a2,…,an-1构成的有限序列b、数组要求其元素占用一块地址连续的内存单元空间,而线性表无此要求c、线性表的元素是逻辑意义上不可再分的元素d、而数组中的每个元素还可以是一个数组e、E数组的操作主要是查找和修改数组元素,线性表主要是插入和删除操作。

解答:以上关于数组与线性表叙述正确3、广义表(a,b,c,d)的表头是_______,表尾是______选项:a、bb、(a)c、ad、(b,c,d)e、b,c,d解答:取表头和取表尾是广义表的两个重要操作。

表头即表中的第一个元素,可能是单个元素也可能是广义表,是第一个元素的原本形式;表尾是由除第一个元素之外的其他所有元素构成的广义表。

如此,广义表(a,b,c,d)的表头是a,表尾是(b,c,d)。

4、无向图有8个顶点V1--V8,边为(V1,V2),(V1,V3),(V2,V4),(V2,V5),(V3,V6),(V3,V7),(V4,V8),(V5,V8),(V6,V7),该图深度优先遍历序列有可能为A、V1,V2,V4,V8,V5,V3,V6,V7B、V1,V2,V5,V8,V4,V3,V6,V7C、V1,V2,V5,V8,V4,V3,V7,V6D、V1,V2,V4,V8,V5,V3,V7,V6解答:该图深度优先遍历序列有可能为A、V1,V2,V4,V8,V5,V3,V6,V7B、V1,V2,V5,V8,V4,V3,V6,V7C、V1,V2,V5,V8,V4,V3,V7,V6D、V1,V2,V4,V8,V5,V3,V7,V65、设哈希表长m=16,哈希函数H(key)=key%13;表中已有3个结点H(19)=6 H(27)=1 H(23)=10 其余地址为空,如用线性探测再散列处理法冲突,关键字14的地址是A、1B、2C、3D、0解答:对关键字14应用哈希函数H(key)=key%13,得目标地址为1,与关键字27的地址冲突,用线性探测再散列处理冲突,即给关键字14的地址1再加1得2,如此,2就是关键字14的最终地址。

第6章-数据结构习题题目及答案-树和二叉树-参考答案

第6章-数据结构习题题目及答案-树和二叉树-参考答案

一、基础知识题6.1设树T的度为4,其中度为1,2,3和4的结点个数分别为4,2,1,1,求树T中的叶子数。

【解答】设度为m的树中度为0,1,2,…,m的结点数分别为n0, n1, n2,…, nm,结点总数为n,分枝数为B,则下面二式成立n= n0+n1+n2+…+nm (1)n=B+1= n1+2n2 +…+mnm+1 (2)由(1)和(2)得叶子结点数n0=1+即: n0=1+(1-1)*4+(2-1)*2+(3-1)*1+(4-1)*1=86.2一棵完全二叉树上有1001个结点,求叶子结点的个数。

【解答】因为在任意二叉树中度为2 的结点数n2和叶子结点数n0有如下关系:n2=n0-1,所以设二叉树的结点数为n, 度为1的结点数为n1,则n= n0+ n1+ n2n=2n0+n1-11002=2n0+n1由于在完全二叉树中,度为1的结点数n1至多为1,叶子数n0是整数。

本题中度为1的结点数n1只能是0,故叶子结点的个数n0为501.注:解本题时要使用以上公式,不要先判断完全二叉树高10,前9层是满二叉树,第10层都是叶子,……。

虽然解法也对,但步骤多且复杂,极易出错。

6.3 一棵124个叶结点的完全二叉树,最多有多少个结点。

【解答】由公式n=2n0+n1-1,当n1为1时,结点数达到最多248个。

6.4.一棵完全二叉树有500个结点,请问该完全二叉树有多少个叶子结点?有多少个度为1的结点?有多少个度为2的结点?如果完全二叉树有501个结点,结果如何?请写出推导过程。

【解答】由公式n=2n0+n1-1,带入具体数得,500=2n0+n1-1,叶子数是整数,度为1的结点数只能为1,故叶子数为250,度为2的结点数是249。

若完全二叉树有501个结点,则叶子数251,度为2的结点数是250,度为1的结点数为0。

6.5 某二叉树有20个叶子结点,有30个结点仅有一个孩子,则该二叉树的总结点数是多少。

兰州大学22春“计算机科学与技术”《数据结构》期末考试高频考点版(带答案)试卷号4

兰州大学22春“计算机科学与技术”《数据结构》期末考试高频考点版(带答案)试卷号4

兰州大学22春“计算机科学与技术”《数据结构》期末考试高频考点版(带答案)一.综合考核(共50题)1.先序遍历一棵二叉排序树得到的结点序列不一定是有序的序列。

()A.正确B.错误参考答案:A2.分块查找的基本思想是首先在索引表中进行查找,以便确定给定的关键字可能存在的块号,然后再在相应的块内进行顺序查找。

()A.正确B.错误参考答案:A3.写出二叉树进行前序和中续遍历的过程。

参考答案:前序遍历:(1)访问根结点(2)前序遍历左子树(3)前序遍历右子树中序遍历:(1)中序遍历左子树(2)访问根结点(3)中序遍历右子树4.图的广度优先遍历算法类似于二叉树的()。

A、先序遍历B、中序遍历C、后序遍历D、层次遍历参考答案:BA.nB.n-1C.n(n-1)2D.n(n+1)2参考答案:C6.链式队列Q为空的判定条件:()A.Q.front==Q.rearB.Q.front==QC.Q==Q.rearD.没有正确参考答案:A7.Prim(普里姆)算法适用于求()的网的最小生成树; kruskal(克鲁斯卡尔)算法适用于求()的网的最小生成树。

A.边稠密,边稀疏B.边稀疏,边稠密C.边稠密,边稠密D.边稀疏,边稀疏参考答案:A8.线性表的唯一存储形式就是链表。

()A.正确B.错误参考答案:A9.数据结构是带有结构的数据元素的集合。

()A.正确B.错误10.平衡二叉树的平衡因子只可能是-1、0、1。

()A.正确B.错误参考答案:A11.设某完全无向图中有n个顶点,则该完全无向图中有()条边。

A.n(n-1)/2B.n(n-1)C.n2D.n2-1参考答案:A12.基数排序需要进行关键字的比较。

()A.正确B.错误参考答案:B13.对n个不同的排序码进行冒泡排序,在下列哪种情况下比较的次数最多()。

A、从小到大排列好的B、从大到小排列好的C、元素无序D、元素基本有序参考答案:B14.对于哈希函数,冲突只能尽可能得少,不可能完全避免。

奥鹏兰州大学21春 《数据结21年春季 构》21春平时作业1.doc

奥鹏兰州大学21春 《数据结21年春季 构》21春平时作业1.doc

1.在对含n个结点的二叉树进行先序、中序和后序遍历时,其时间复杂度( ) 。

A.都不相同B.完全相同C.先序和中序相同,而与后序不同D.中序和后序相同,而与先序不同【参考答案】: B2.对线性表进行折半查找时, 要求线性表必须( )。

A.以顺序方式存储B.以链接方式存储C.以顺序方式存储,且结点按关键字有序排序D.以链接方式存储,且结点按关键字有序排序【参考答案】: C3.一个队列的入队序列是1、2、3、4,则队列的首次输出元素是________A.1B.2C.3D.4【参考答案】: A4.顺序存储结构是通过___表示元素之间的关系的;链式存储结构是通过___表示元素之间的关系的。

A.物理上相邻,指针B.逻辑上相邻,指针C.逻辑上相临,结点D.物理上相邻,结点【参考答案】: A5.Prim(普里姆)算法适用于求___的网的最小生成树;kruskal(克鲁斯卡尔)算法适用于求___的网的最小生成树。

A.边稠密,边稀疏B.边稀疏,边稠密C.边稠密,边稠密D.边稀疏,边稀疏【参考答案】: A6.堆的形状是一棵A.二叉排序树B.满二叉树C.完全二叉树D.平衡二叉树【参考答案】: C7.链表不具备的特点是()。

A.可随机访问任意一个结点B.插入和删除不需要移动任何元素C.不必事先估计存储空间D.所需空间与其长度成正比【参考答案】: A8.序列49、38、65、97、76、13、27、49进行一趟冒泡排序后的序列为A.、49、38、65、97、76、13、27、49B.13、27、38、49、49、65、76、97C.38、49、65、76、13、27、49、97 D.38、49、65、13、27、49、76、97【参考答案】: C9.设某完全无向图中有n个顶点,则该完全无向图中有()条边。

A.n(n-1)/2B.n(n-1)C.n2D.n2-1【参考答案】: A10.在所有排序方法中,关键字比较的次数与记录的初始排列次序无关的是()。

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

兰州大学网络教育学院数据结构命题作业二叉树
答案:
第一题
//二叉树结点
typedef struct BiTNode{
//数据
char data;
//左右孩子指针
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//按前序遍历创建二叉树
int CreateBiTree(BiTree &T){
char data;
//按先序次序输入二叉树中结点的值(一个字符),‘#’表示空树scanf("%c",&data);
if(data == '#'){
T = NULL;
}
else{
T = (BiTree)malloc(sizeof(BiTNode));
//生成根结点
T->data = data;
//构造左子树
CreateBiTree(T->lchild);
//构造右子树
CreateBiTree(T->rchild);
}
return 0;
}
//输出
void Visit(BiTree T){
if(T->data != '#'){
printf("%c ",T->data);
}
}
//前序遍历
void PreOrder(BiTree T){
if(T != NULL){
//访问根节点
Visit(T);
//访问左子结点
PreOrder(T->lchild);
//访问右子结点PreOrder(T->rchild);
}
}
//中序遍历
void InOrder(BiTree T){ if(T != NULL){
//访问左子结点InOrder(T->lchild);
//访问根节点
Visit(T);
//访问右子结点InOrder(T->rchild);
}
}
//后序遍历
void PostOrder(BiTree T){ if(T != NULL){
//访问左子结点PostOrder(T->lchild);
//访问右子结点PostOrder(T->rchild);
//访问根节点
Visit(T);
}
}
前序/先序遍历:
结果:1245736
特征:访问根结点的操作发生在遍历其左右子树之前
中序遍历:
结果:4275136
特征:访问根结点的操作发生在遍历其左右子树之中(间)后序遍历:
结果:4752631
特征:访问根结点的操作发生在遍历其左右子树之后
第二题
采用中序遍历的结果:4275136从大到小排序
直接插入排序:
void InsSort(int a[], int k)
{
int j;
for(int i=1;i<k;i++)//循环从第2个元素开始
{
if(a[i] > a[i-1])
{
int temp=a[i];
for(j=i-1;j>=0 && a[j]<temp;j--)
{
a[j+1]=a[j];
}
a[j+1]=temp;//此处就是a[j+1]=temp;
}
}
}
冒泡排序:
void BubbleSort(int a[], int k)
{
int i,j,temp;
for(j=0;j<n-1;j++)
{
for(i=0;i<n-1-j;i++)
{
if(a[i]<a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
}
void main()
{
int a[]={4,2,7,5,1,3,6};
int k=sizeof(a)/sizeof(a[0]);//数组大小InsSort(a, k);//直接插入排序
for(int i=0; i<k;i++)
{
printf("%d ", a[i]);
}
printf("\n");
int b[]={4,2,7,5,1,3,6};
int n=sizeof(a)/sizeof(a[0]);//数组大小
BubbleSort(b, n);//冒泡排序
for(int i=0; i<n;i++)
{
printf("%d ", b[i]);
}
printf("\n");
}
第三题
直接插入排序:
思想:最基本的插入排序,将第n个插入到前n-1个中的适当位置
时间复杂度:T(n) = O(n²)
稳定性:稳定排序。

循环条件(j>=0 && a[j]<temp)保证的
冒泡排序:
思想:反复扫描待排序序列,在扫描的过程中顺次比较相邻的两个元素的大小,若逆序就交换位置。

第一趟,从第一个数据开始,比较相邻的两个数据,(以升序为例)如果大就交换,得到一个最大数据在末尾;然后进行第二趟,只扫描前n-1个元素,得到次大的放在倒数第二位。

以此类推,最后得到升序序列。

如果在扫描过程中,发现没有交换,说明已经排好序列,直接终止扫描。

所以最多进行n-1趟扫描
时间复杂度:T(n) = O(n²)
稳定性:稳定排序。

相关文档
最新文档