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