二叉排序树算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
沈阳航空航天大学
课程设计报告
课程设计名称:数据结构课程设计课程设计题目:二叉排序树算法
院(系):计算机学院
专业:计算机科学与技术
班级:04010103
学号:2010040101097
姓名:郭胜龙
指导教师:丁一军
此页为任务书
目录
1 课程设计介绍 (1)
1.1课程设计内容 (1)
1.2课程设计要求 (1)
2 课程设计原理 (2)
2.1课设题目粗略分析 (2)
2.2原理图介绍 (2)
2.2.1 功能模块图 (2)
2.2.2 main(主函数) (2)
2.2.3 SearchBST(查找) (3)
2.2.4 InsertBST(插入) (4)
2.2.5 CreatBST(建立) (4)
2.2.6 DeleteBST(删除) (4)
2.2.7 PreOrder(先序遍历) (5)
2.2.8 InOrder(中序遍历) (5)
3 数据结构分析 (7)
3.1存储结构 (7)
3.2算法描述 (7)
4 调试与分析 (12)
4.1调试过程 (12)
4.2程序执行过程 (12)
参考文献 (15)
附录(关键部分程序清单) (16)
沈阳航空航天大学课程设计报告
1 课程设计介绍
1.1 课程设计内容
题目内容:
1.构造二叉排序树;
2.输出该二叉排序树的先序、中序遍历序列;
3.删除该二叉排序树的任意一个结点;
4.输出删除后的二叉排序树的先序、中序遍历序列。
1.2课程设计要求
题目要求:
1.按要求建立不同的二叉排序树;
2.数据自定
3.独立完成课程设计任务
2 课程设计原理
2.1
课设题目粗略分析
根据课设题目要求,拟将整体程序分为七大模块。以下是七个模块的大体分
析:
main ():主函数模块
SearchBST ():查找相应的结点 InsertBST1():插入一个新的结点 CreatBST ():创建一棵二叉排序树 DeleteNode ():删除结点
PreOrder ()对二叉排序树进行先序遍历 InOrder ()对二叉排序树进行中序遍历
2.2 原理图介绍
2.2.1 功能模块图
图2.2.1 功能模块结构图
2.2.2 main (主函数)
功能:连接各个函数,确定他们的执行顺序和条件。
二叉排
序树算法
主模块
查找模块 插入模块 建立模块 删除模块 先序遍历模块 中序遍历模块
图2.2.2主函数流程图
2.2.3 SearchBST (查找)
功能:查找相应的结点。
图2.2.3 查找操作的流程图
开始
选择功能
Choose=1 建立二叉排序树
Choose=2 删除x 结点
Choose=3 先序遍历二叉排
Choose=0 退出
Choose=4 中序遍历二叉排
A
结束
A
Y
Y
开始
T->data==key s=T
T->data>key
s=SearchBST(T->rchild)
s=SearchBST(T->lchild)
N
N
返回s
结束
2.2.4 InsertBST (插入)
功能:插入一个新的结点。
图2.2.4 插入操作的流程图
2.2.5 CreatBST (建立)
功能:建立一个已知数据的二叉排序树。
图2.2.5 建立操作的流程图
2.2.6 DeleteBST (删除)
功能:删除值为x 的结点。
Y
Y
开始
T==NULL T=s
s->data>T->data
s=InserBST(T->r
child)
s=InsertBST(T->l
child)
N
N
结束
开始
输入结点数n
调用插入函数
结束
开始
调用查找函数
删除p结点
右子树连在左
子树上
左子树连在p
结点的父母节
点上
结束
图2.2.6 删除操作的流程图2.2.7 PreOrder(先序遍历)
功能:对二叉排序树进行先序遍历,并输出序列。
开始
访问T
PreOrder(T->rchild)
PreOrder(T->lchild)
结束
图2.2.7 先序遍历的流程图2.2.8 InOrder(中序遍历)
功能:对二叉排序树进行先序遍历,并输出序列。
开始
InOrder(T->rchild)
访问T
InOrder(T->lchild)
结束
图2.2.8 中序遍历的流程图
沈阳航空航天大学课程设计报告错误!未指定书签。
3 数据结构分析
3.1 存储结构
定义一个链表式的二叉排序树,用链表的方式构造结点,存储二叉排序树中的结点、结点类型和指针类型如下:
typedef struct BiTNode
{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
3.2 算法描述
1、二叉排序树的查找算法
(1)若二叉排序树为空,则查找失败。
(2)否则,将根结点的关键字与待查关键字进行比较,若相等,则查找成功;若根节点关键字大于待查值,则进入左子树重复次步骤,否则,进入右子树进行此步骤;若在查找过程中遇到二叉排序树的叶子节点时,还没有找到待查节点,则查找不成功。
算法如下:
BiTree SearchBST1(BiTree T, int key)
{//在根指针T所指二叉排序树中递归查找关键字等于 key 的数据元素
//若成功,返回指向该数据元素结点的指针,否则返回空指针;s为返回 //指针
BiTree s;
if(T==NULL) return NULL;
else if(T->data==key) s=T;
else if(T->data>key) //key大于当前结点的关键字,则查找左子树