二叉排序树的插入与删除
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计题目:二叉排序树的插入、删除算法
沈阳航空航天大学课程设计报告
1 需求分析
了解二叉排序树组成与其性质,知道其构成。创建一个二叉排序树,并对其先序遍历,输出。然后根据二叉排序树性质,删除,插入,查找其结点与叶子,然后先序遍历输出。
内容:1. 给定一组关键字,生成一棵二叉排序树;
2. 删除该二叉排序树中的指定节点,删除后二叉排序树性质不发生变化;
3. 用直观、易于理解的形式来演示二叉排序树的插入、删除过程。
要求:1、独立完成系统的设计、编码和调试。
2、系统利用C语言实现。
3、按照课程设计规范书写课程设计报告。
2 系统设计
2.1 数据结构设计
typedef struct Tree{
int data;
struct Tree *lchild, *rchild;
}Tree, *PTree;
定义结构体Tree,data:数据,*lchild:指针左孩子,*rchild:指针右孩子*PTree代表结构体的指针
2.2 函数设计
本系统所设计的函数见表2.1。
表2.1 函数列表
本系统函数的调用关系见图2.1。
main
Tree *Create
Insert
search
图2.1 函数调用关系
2.3 关键流程
2.3.1 系统主流程
图2.2 系统主流程
scanf_s("%d", &j) != EOF switch (j )
case1 case2 case4
case3 return
是
否
开 始
结 束
2.3.2 创建函数流程
图2.3 创建函数主流程
p == NULL p=(Tree*)malloc(sizeof(Tree)); p ->data = k;
p ->lchild = p ->rchild = NULL;
k== ->data
k
data
return0
Insert(p ->lchild, k)
Insert(p ->rchild, k)
是
是
是
否
否
否
开 始
结 束
2.3.3 插入函数流程
图2.4 插入函数主流程
!search(T,e, NULL, p) s = (PTree)malloc(sizeof (Tree)); s->data = e;
s->lchild = s->rchild = NULL;
p==0 e
dat
p ->lchild = s
T = s
p ->rchild = s
是
否
否
是
是
否
开 始
结 束
2.3.4 删除函数流程
开始
是
T==0
否
是
e== T->data
否
是
e< T->data
否
DeleteTree(T->lchild, e)DeleteTree(T->rchild, e)f(T)return1
结束
图2.5 删除函数主流程
3 调试分析
(1) 指针问题
●问题描述:输入数据时,总不能得到结果。
●问题分析:在建立二叉树函数定义中,是对指针的值进行修改
●解决方法:使用指向指针的指针
(2) 字符问题
●问题描述:试验中经常出现前后字符不一致的情况。
●问题分析:编写时不够自习,遇到比较长的程序,容易出错。
●解决方法:勤加练习,认真仔细检查。
(3) 问题
●问题描述:在类似(*T)->key=key,没加括号,程序不能运行。
●问题分析:不够仔细。
●解决方法:检查程序,注意细节。
沈阳航空航天大学课程设计报告第4章测试及运行结果
4 测试及运行结果
输入6个数据:19 95 8 17 7 22 先序遍历后的结果:19 8 7 17 95 22
插入结点56,输出先序遍历结果:19 8 7 17 95 22 56
12
沈阳航空航天大学课程设计报告第4章测试及运行结果选择删除的结点:7 输出先序遍历结果:19 8 17 95 22 56
13
沈阳航空航天大学课程设计报告参考文献
参考文献
[1] 严蔚敏吴伟民数据结构(C语言版):清华大学出版社
[2] 王敬华林萍张清国C语言程序设计教程(第二版):清华大学出版社
[3] 韦斯数据结构与算法分析(C语言描述):机械工业出版社
[4] 王宏生.数据结构.北京:国防出版社。
[5] 滕国文数据结构课程设计:清华大学出版社
14
16