![第六章特殊二叉树一_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/893dfe4d-807d-444b-9995-d26de1c7dc0c/893dfe4d-807d-444b-9995-d26de1c7dc0c1.gif)
![第六章特殊二叉树一_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/893dfe4d-807d-444b-9995-d26de1c7dc0c/893dfe4d-807d-444b-9995-d26de1c7dc0c2.gif)
![第六章特殊二叉树一_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/893dfe4d-807d-444b-9995-d26de1c7dc0c/893dfe4d-807d-444b-9995-d26de1c7dc0c3.gif)
![第六章特殊二叉树一_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/893dfe4d-807d-444b-9995-d26de1c7dc0c/893dfe4d-807d-444b-9995-d26de1c7dc0c4.gif)
![第六章特殊二叉树一_第5页](http://file2.renrendoc.com/fileroot_temp3/2021-11/11/893dfe4d-807d-444b-9995-d26de1c7dc0c/893dfe4d-807d-444b-9995-d26de1c7dc0c5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第六章 特殊二叉树 一 . 第六章 二叉树的应用习 题 六一、填空题1.从二叉搜索树中查找一个元素时,其时间复杂度大致为 C 。A O(n) B O(1) C O(log2n) D O(n2)2.向二叉搜索树中插入一个元素时,其时间复杂度大致为 B 。A O(1) B O(log2n) C O(n) D O(nlog2n)3.根据n个元素建立一棵二叉搜索树时,其时间复杂度大致为 D 。A O(n) B O(log2n) C O(n2) D O(nlog2n) 4.从堆中删除一个元素的时间复杂度为 C 。A O(1) B O(n) C O(log2n) D O(nlog2n)5.向堆中插入一个元
2、素的时间复杂度为 A 。A O(log2n) B O(n) C O(1) D O(nlog2n)6.权值分别为3,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为 D 。A 24 B 48 C 72 D 51二、填空题1.在一棵二叉搜索树中,每个分支结点的左子树上所有结点的值一定 小于 该结点的值,右子树上所有结点的值一定 大于 该结点的值。2.对一棵二叉搜索树进行中序遍历时,得到结点序列是一个 有序序列 。3.从一棵二叉搜索树中查找一个元素时,若元素的值等于根结点的值,则表明 查找成功 ,若元素的值小于根结点的值,则继续向 左子树 查找,若元素的值大于根结点的值,则继续向 右子树
3、 查找。4.在一个堆的顺序存储中,若一个元素的下标为i,则它的左孩子元素的下标为 2i+1 ,右孩子元素的下标为 2i+2 。5.在一个小根堆中,堆顶结点的值是所有结点中的 最小值 ,在一个大根堆中,堆顶结点的值是所有结点中的 最大值 。6.当向一个小根堆插入一个具有最小值的元素时,该元素需要逐层 向上 调整,直到被调整到 堆顶 位置为止。7.当从一个小根堆中删除一个元素时,需要把 堆尾 元素填补到 堆顶 位置,然后再按条件把它逐层 向下 调整。8.在哈夫曼编码中,若编码长度只允许小于等于4,则除了已对两个字符编码为0和10外,还可以最多对 4 个字符编码。三、普通题1.已知一组元素(46,2
4、5,78,62,12,37,70,29),画出按元素排列顺序输入生成的一棵二叉树。解:略2.已知一棵二叉排序树如图6-11所示,若从中依次删除72,12,49,28结点,试分别画出每删除一个结点后得到的二叉排序树。解:略28/ 12 49 / 16 34 72/ /30 633.设在一棵二叉排序树的每个结点中,含有关键字key域和统计相同关键字结点个数的count域,当向该树插入一个元素时,若树中已存在与该元素的关键字相同的结点,则就使该结点的co unt域增1,否则就由该元素生成一个新结点而插入到树中,并使其count域置为1,试按照这种插入要求编写一个算法。解:void Insert(BT
5、reeNode*&BST,ElemType& item)/向二叉排序树中插入一个不重复元素item,若树中存在该元素,则将一配结点值域中的/count域的值加1即可/从二叉排序树中查找关键字为item.key的结点,若查找成功则指针t指向该点结点,否则/指针s指向待插入新结点的双亲结点BTreeNode *t=BST,*S=NULL;while(t!=NULL)s=t;if(item.key=t->data.key)break;else if(item.key<t->data.key)t=t->left;e
6、lset=t->right;/元素已存在,则将其值域中的count域的值增1,否则建立新结点并插入到合适位置if(t!=NULL)t->data.count+;elseBTreeNode* p=new BTreeNode;p->data=item;p->data.count=1;p->left=p->right=NULL;if(s=NULL)BST=p;elseif(item.key<s->data.key)s->left=p;elses->right=p
7、;4.编写一个非递归算法求出二叉排序树中的关键字最大的元素。解:ElemType FindMax(BTreeNode* BST)/从二叉排序树中返回关键字最大的元素if(BST=NULL)cerr<<"不能在空树上查找最大值!"<<end1;exit(1);BTreeNode* t=BST;while(t->right!=NULL)t=t->right;return t->data;5.假定一棵二叉排序树被存储在具有ABTList数组类型的一个对象BST中,试编
8、写出以下算法。1.初始化对象BST。解:void InitBTree(ABTList BST)/将树置空BST0.left=0;/建立空闲链接表BST0.right=1;for(int i=1;i<BTreeMaxSize-1;i+)BSTi.right=i+1;BSTBTreeMaxSize-1.right=0;2.向二叉树排序树中插入一个元素。解:void Insert(ANTList BST,int&t,const ElemType& item)/向数组中的二叉排序树插入一个元素item的递归算法,变参t初始指向树根结点if(t=0)/进行插
9、入操作/取出一个空闲结点int p=BST0.right;if(p=0)cerr<<"数组空间用完!"<<end1;exit(1);/修改空闲链表的表头指针,使之指向下一个空闲结点BST0.right=BSTp.right;/生成新结点BSTp.data=item;BSTp.left=BSTp.right=0;/把新结点插入到确定的位置t=p;else if(item.key<BSTt.data.key) Insert(BST,BSTt.left,item);/向左子树中插入元素elseI
10、nsert(BST,BSTt.right,item);/向右子树中插入元素void Insert(ABTList BST,const ElemType& item)/向数组中的二叉排序树插入一个元素item的非递归算法/为新元素寻找插入位置int t=BST0.left,parent=0;while(t!=0)parent=t;if(item.key<BSTt.data.key)t=BSTt.left;elset=BSTt.right;/由item生成新结点并修改空闲链表的表头指针int p=BST0.right;if(p=0)cerr<&l
11、t;"数组空间用完!"<<end1;exit(1);BST0.right=BSTp.right;BSTp.data=item;BSTp.left=BSTp.right=0;/将新结点插入到二叉排序树中的确定位置上if(parent=0)BSTo.left=p;else if(item.key<BSTparent.data.key)BSTparent.left=p;elseBSTparent.right=p;3.根据数组a中的n个元素建立二叉排序树。解:void CreateBSTree(ABTList BST,Ele
12、mType a,int n)/利用数组中的元素建立二叉排序树的算法for(int i=0;i<n;i+)Insert(BST,BST0.left,ai);4.中序遍历二叉排序树。解:void Inorder(ABTList BST,int t)/对数组中的二叉树进行中序遍历的递归算法if(t!=0)Inorder(BST,BSTt.left);cout<<BSTt.data.key<<''Inorder(BST,BSTt.right);void Inorder(ABTList BST)/对数组
13、中的二叉树进行中序遍历的非递归算法int s10;/定义用于存储结点指针的栈int top=-1; /定义栈顶指针并赋初值使s栈为空int p=BST0.left;/定义指针p并使树根指针为它的初值while(top=-1|p!=0)/当栈非空或p指针非0时执行循环while(p!=0)top+;stop=p;p=BSTp.left;if(top!=-1)p=stop;top-;cout<<BSTp.data.key<<''p=BSTp.right;5.写出一个完整程序调用上述算法。解:#include&a
14、mp;lt;iostream.h>#include<stdlib.h>const int BTreeMaxSize=50;struct studentint key;int rest;typedef student ElemType;/定义二叉排序树中元素的类型为student记录型struct ABTreeNode/定义二叉排序树的结点类型ElemType data;int left,right;typedef ABTreeNode ABTListBTreeMaxSize;/定义保存二叉排序树的数组类型,各算法同上,在 此省略void main()student a8=36,54,25,30,43,18,50,28;/为简单起见在每个元素中只给出关键字ABTList bst;I
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 仓储保管协议合同范本
- 供暖合同范本北京
- 喷枪在科技馆互动设备涂装的应用考核试卷
- 创业工作合同范本
- 乐器修理合同范本
- 2025-2030年房车内部豪华装修定制企业制定与实施新质生产力战略研究报告
- 塑料挤出机的振动抑制技术考核试卷
- 农村底楼整修合同范例
- 农田土地租用合同范本
- 2025-2030年数据清洗自动化平台企业制定与实施新质生产力战略研究报告
- JJF 1069-2012 法定计量检定机构考核规范(培训讲稿)
- 最新如何进行隔代教育专业知识讲座课件
- 当前警察职务犯罪的特征、原因及防范,司法制度论文
- 计算机文化基础单元设计-windows
- 创建动物保护家园-完整精讲版课件
- 广东省保安服务监管信息系统用户手册(操作手册)
- DNA 亲子鉴定手册 模板
- DB33T 1233-2021 基坑工程地下连续墙技术规程
- 天津 建设工程委托监理合同(示范文本)
- 部编一年级语文下册教材分析
- 火炬及火炬气回收系统操作手册
评论
0/150
提交评论