二叉排序树的插入与删除

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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

相关文档
最新文档