- 1、本文档共23页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
江苏大学C++二叉排序树的建立、插入、删除和查找(免费下载).doc
数据结构课程设计实验报告
设计题目:二叉排序树的建立、插入、删除和查找
学生姓名:
系 别:
专 业:
班 级:
学 号:
指导教师:
一、需求分析
1、运行环境
Microsoft Visual Studio 2008
2、程序所实现的功能
二叉排序树的建立、插入、删除和查找
给出一组关键值,建立相应的二叉排序树,完成:
⑴结点的删除操作。要求可以实现删除根结点、叶子结点以及其它任意结点的功能;
⑵插入一个新结点的操作;
⑶对给定的值在二叉排序树进行查找;
⑷随时显示操作的结果。
3、程序的输入,包含输入的数据格式和说明
程序从外部输入数据,输入一串数字序列并以-1结束
4、程序的输出,及其输出格式
通过用户手动选择操作指令,经由程序内部处理,输
出相应的结果到显示屏
5、测试数据,如果程序输入的数据量比较大,需要给出测试数据
用户手动输入一个数字序列进行数据测试
二、设计说明
1、算法设计的思想
通过算法的需求,确定算法的主要模块(建立并输出二叉树、插入结点、删除结点、查找结点、以及主函数模块)对各模块再进行函数的选取与构造,以及变量的控制等。最后,再将各模块结合,形成完整的算法,注意全局变量的选择。
2、主要的数据结构设计说明
二叉排序树的主要存储结构
Typedef struct TreeNode//声明数的结构
{
Int key;//存放关键字
Struct TreeNode*left;//存放左子树的指针
Struct TreeNode*right;//存放右子树的指针
}treeNode;
3、程序的主要流程图
否 是
4、程序的主要模块,要求对流程图中出现的模块说明
*建立二叉树,用插入函数依次插入用户输入的序列,最后再中序遍历并输出显示
*结点的插入,运用递归算法进行结点的插入
*结点的删除,是该算法中较为复杂的一个模块,需判定用户输入的结点是根,还是叶子,这关系到删除的结点在序列中的位置
*结点的查找,在根指针所指二叉排序树中递归查找关键字等于 key 的数据元素;
若成功,返回指向该数据元素结点的指针;
否则返回空指针;
1)主函数模块
Main()
{
建立n个关键字的二叉排序树并输出;
从二叉树排序树中删除任意结点 ;
在二叉树排序树中,插入一个结点 ;
在二叉排序树中递归查找关键字 ;
}
2)创建二叉排序树模块
treeNode* buildTree(treeNode* head,int number)
{
建立n个关键字的二叉排序树;
从键盘输入调建立n个关键字依次用insertTree(int key) ;
返回根结点 ;
输出过程;
}
3)删除模块
deleteTree(int key)
{
从二叉树排序树 中删除任意结点 ;
可以实现删除根结点、叶子结点以及其它任意结点的功能;
1. 若结点p是叶子,则直接删除结点p;
2. 若结点p只有左子树,则只需重接p的左子树;
若结点p只有右子树,则只需重接p的右子树;
3. 若结点p的左右子树均不空,则
a查找结点p的右子树上的最左下结点(若为s) 以 及该结点 的双亲结点par;
b将结点s数据域替换到被删结点p的数据域;
c若结点p的右孩子无左子树,则将s的右子树接到par的右子树上;否则,将s的右子树接到结点par的左子树上;
d删除结点s;
}
4)插入模块
void insertTree(int key)
{
在二叉树排序树中,插入一个结点s(递归算法);
被CreatBST函数调用;}
5)查找模块
treeNode* searchTree(int key)
{
在根指针所指二叉排序树中递归查找关键字等于 key 的数据元素;
若成功,返回指向该数据元素结点的指针;
否则返回空指针;
}
程序的主要函数及其伪代码说明
treeNode* BiSortTree::buildTree(treeNode* head,
文档评论(0)