- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
关于二叉排序树的实现
课程设计报告关于二叉排序树的实现一:需求分析1:基本要求以回车(\n)为输入结束标志,输入数列L,生成一棵二叉排 序树T;对二叉排序树T作中序遍历,输出结果;输入元素x,查找二叉排序树T,若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);否则输出信息“无x”;2:设计要求:(1) 符合课题要求,实现相应功能;(2) 要求界面友好美观,操作方便易行;(3) 注意程序的实用性、安全性。3:设计所采用的数据结构1:利用数组思想,通过改变数组指针来表示数组的左右子树,左子树的下标为2*i,右子树的下标为2*i+1. 2:树的存储结构如下:#define N 100 /*二叉树结点的最大数目*/typedefstruct{int *data; /*数组首址指针*/intlenth; /*数组长度*/}BST;4:每个模块的功能要求: 初始化一个数组,开辟一块内存空间,先建立一个插入函数。 创建一棵二叉树,中序遍历该树在二叉排序树中查找其关键字等于给定值的结点是否存在删除所给结点,并对新树中序遍历最后,可以判断所给树是否为平衡树二:概要设计1:使用树的动态顺序存储结构,先初始化一个数组。2:建立一个插入函数,通过调用该函数边查找边插入建立二叉排序树3:通过递归调用,中序遍历树,以及判断其是否为平衡树4:q.data=(int *)malloc(N*sizeof(int)); /*重新初始化一个数组Q*/新的数组储存删除给定结点的新树5:要实现二叉排序树,要先创建二叉排序树,在以下程序中利用边查找边插入来建立二叉排序树。BST create(int *crew,int num) /*创建二叉排序树的函数*/{ BST T;inti,j;T.data=(int *)malloc(N*sizeof(int)); /*数组初始化*/for(j=0;jN;j++) T.data[j]=0;T.lenth=0; for(i=0;inum;i++) /*边查找边插入建立二插排序树*/ {insert(T,1,crew[i]); ++T.lenth; /*记录树中结点的个数*/ }return (T);}在这个过程中,调用了已经建立的函数insert(T,1,crew[i]); 为新结点查找到相应的位置,将其插入树中。6:中序遍历二叉排序树的结果应该是一列从小到大排列的数7:在删除函数中,要保证删除后得到的二叉树依然是二叉排序树,在下列程序中是利用重建一个新的二叉树,将不删除的元素复制到该树中。BST cancle(BST T,int key) /*删除函数*/{ BST q;inti;q.data=(int *)malloc(N*sizeof(int)); /*重新初始化一个链表Q*/for(i=0;iN;i++) q.data[i]=0;q.lenth=0; for(i=1;iNT.lenth0;i++)/*T中不为要删结点的元素全部复制到Q*/ {if(T.data[i]==0||T.data[i]==key) continue;insert(q,1,T.data[i]); --T.lenth; ++q.lenth; }return(q);}5:判断一棵树是否为平衡二叉树,看其左右子树的高度之差的绝对值是否小于等于1。 dep1=balanceBST(T,T.data[2*i],k); dep2=balanceBST(T,T.data[2*i+1],k); }if((dep1-dep2)1||(dep1-dep2)-1) *k=dep1-dep2;/*用k值记录是否存在不平衡现象*/if(dep1dep2) return(dep1+1);else return(dep2+1);6:主函数利用switch语句实现不同函数功能的显示。三:详细设计#includestdio.h#includestdlib.h#define N 100 /*二叉树结点的最大数目*/typedefstruct{int *data; /*数组首址指针*/intlenth; /*数组长度*/}BST;insert(BST T,inti,int key) /*插入函数*/{ if(i1||iN) printf(失败!); /*插入不成功*/ if(T.data[i]==0) T.data[i]=key; /*被插结点是新的根节点*/ else if(keyT.data[i]) insert(
您可能关注的文档
最近下载
- 《趣制标识校园行》小学二年级劳动教育PPT课件.pptx VIP
- 天润乳业的营运能力分析.docx
- (人教版2024)七年级英语下册Unit 1 Section A(1a-1d)课件.pptx
- 人教版九年级上册化学第5单元课题3《利用化学方程式的简单计算》教学设计.doc VIP
- 人教版九年级上册化学第5单元课题3《利用化学方程式的简单计算》教学设计.pdf VIP
- 沪科版八年级物理下册全册教学课件(2024年春季版).pptx
- 论多媒体技术在高中物理教学与学习效率的认识.doc
- 传统文化体验活动非遗漆扇-团建拓展家庭日方案.pptx VIP
- 农村办丧事歌曲100首歌名.pdf
- 大数据导论配套教材课件完整版电子教案.pptx
文档评论(0)