数据结构课程设计报告---二叉排序树实现集合的运算.docVIP

数据结构课程设计报告---二叉排序树实现集合的运算.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程设计报告---二叉排序树实现集合的运算.doc

数据结构课程设计报告 设计题目班级学号程序中采用树形结构作为其数据结构。{ BSTree t=NULL; //根结点 KeyType key; int i=0; if(!*iArr) { cinkey; while(key!=-1 ++iMaxElement) //输入-1或输入到最大个数止 { (*iArr)++;iArr[*iArr] = key; //集合元素先在数组中存放 cinkey; } } for(i=1;i=*iArr;i++) //由数组形式 生成 二叉排序树状集合形式 { insertBST(t,iArr[i]); } return t; } 左、右子树的插入方式与二叉排序树的插入方式相同。 不断调用上述的插入过程,直到所有待排序序列均排入后,就形成一棵二叉排序树。 由此可见,建立二叉排序树就是多次调用二叉排序树的插入算法。 2.3二叉排序树的生成过程 二叉排序树的生成,采用递归方式的边查找边插入的方式。如图: 2.4中序遍历二叉排序树(中序输出集合,按从小到大的顺序) 中序遍历二叉树算法的框架是: 若二叉树为空,则空操作;否则 中序遍历左子树; 访问根结点; 中序遍历右子树。 中序遍历二叉树也采用递归函数的方式,先访问左子树,然后访问根结点,最后访问右子树,直至所有的结点都被访问完毕。 代码如下: void inorder_btree(BSTree root)// 中序遍历打印二叉排序树 { BSTree p=root; if(p!=NULL){ inorder_btree(p-left ); cout p-key ; inorder_btree(p-right ); } } 3 详细设计和实现 3.1主要功能模块设计 1.元素判定: 用查找的方法实现元素判定; BSTree searchBST(BSTree t,KeyType key) { if(!t || key==t-key) return t; if(keyt-key) return searchBST(t-left,key); else return searchBST(t-right,key); } 改为返回指针,未找到时返回空指针 找到时返回所在位置,先判是不是空指针,非空了再判是不是相等了。 2.子集判定: 不懂怎么一个一个的来访问树结点,只好使个偷懒的方法啦,转成数组,再遍历数组,老师,别介意哦; 只要在另一个集合中找到有没有与这个集合相等的元素就ok了。函数如下: int beyong(BSTree m,BSTree n) { int i,Array[MaxElement]={0} inorder_btree2Arr(n,Array); for(i=1;i=*Array;i++) if(!searchBST(m,Array[i])) return 0; return 1; } 3.求并集:A+B=C 中序遍历两个集合,先把A集合赋给C,然后把集合B的元素插入到C中就行了。 void combineTree(BSTree A,BSTree B,BSTree C) { int i,Array[MaxElement]={0}; inorder_btree2Arr(A,Array); C = createBST(Array); Array[0]=0; inorder_btree2Arr(B,Array); for(i=1; i=*Array; i++) insertBST(C,Array[i]); } 4.交集:A∩B=C 用查找的方法在B中查找A中的每一个元素,把查找到得元素构成一个新的新的集合C。 void joinTree(BSTree A,BSTree B,BSTree C) { int i,Array[MaxElement]={0},Array1[MaxElement]={0}; inorder_btree2Arr(B,Array); for(i=1;i=*Array;i++) if(searchBST(A,Array[i])){Array1[0]++; Array1[Array1[0]] = Array[i];}//求相交的所有元素 if(Array1[0]) C = createBST(Array1); //结果不空时 再组一个集合 else C=NULL; } 5.求差集:A-B=C 中序遍历A中的元素,在B中查找到这些元素,求出所有不属于B中的元素,在创建一颗二叉排序树集合C,把这些有元素放入到C中即可。 void differenced

文档评论(0)

zhangningclb + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档