二叉树数据结构课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构课程设计报告题目:线索二叉树的应用
院(系):计算机工程学院
专业:嵌入式系统软件设计方向
班级:嵌入式109(1)
学生:黄江彬
指导教师:寇海洲殷路
邱军林孙成富
2010年12月
目录
1.设计目的 (3)
2.总体设计 (3)
2.1首先创建一个线索二叉树 (3)
2.2功能函数的实现 (4)
3.调试分析 (7)
4.测试结果 (7)
5课程设计小结. (10)
1.设计目的
线索二叉树的应用:
创建线索二叉树,实现二叉树的建立,插入,删除,恢复线索的算法。2.总体设计
实现过程和步骤提示:
2.1首先创建一个线索二叉树
2.1.1功能说明:程序首先显示创建线索二叉树的界面,并等待用户输入命令(见图1-1所示)。假如用户输入ABCE##F##D##G##,程序将在显示屏上输出运算结果(见图1-2所示)。
图1-1
图1-2
2.1.2创建线索二叉树的程序代码:
//创建二叉树ABD#GJ##K##E##C#FH##IL### ABCD##E###F#GH##I#J#K## void Creat(Bitree *p) //指向指针的指针
{
char ch=getchar();
if(ch=='#')
(*p)=NULL;
else
{
//Bitree k;
*p=(Bitreenode *)malloc(sizeof(Bitreenode));
(*p)->data=ch;
Creat(&(*p)->lchild);
Creat(&(*p)->rchild);
}
//return 1;
}
2.1.3创建线索二叉树系统菜单实现提示:
(1).遇“#”则该结点为空;
(2).直接从键盘获取字符串.
2.2功能函数的实现
2.2.1二叉树的遍历
2.2.1.1功能说明:对用户输入的二叉树进行遍历
2.2.1.2二叉树的遍历程序代码:
//先序遍历
void First(Bitree p)
{
if(p)
{
printf("%2c",p->data);
First(p->lchild);
First(p->rchild);
}
}
//中序遍历
void Middle(Bitree p)
{
if(p)
{
Middle(p->lchild);
printf("%2c",p->data);
Middle(p->child);
}
//后序遍历
void Last(Bitree p)
{
if(p)
{
Last(p->lchild);
Last(p->rchild);
printf("%2c",p->data);
}
}
2.2.1.3遍历二叉树功能实现提示:
(1).用户输入二叉树后函数自动对所输入二叉树进行遍历。
2.2.2结点的删除
2.2.2.1功能说明:删除二叉树中任意一个结点
2.2.2.2删除结点的程序代码
删除结点之前要对所要删除的结点进行查找
//在二叉树中查找值为x的结点
void search(Bitree *q,char x,Bitree *p)
{
if((*q)->data==x) *p=*q;
else
{
if((*q)->lchild) search(&(*q)->lchild,x,&(*p));
if((*q)->rchild) search(&(*q)->rchild,x,&(*p));
}
//return NULL;
}
查找到后进行删除操作(左右子树的删除操作类似)
//删除左子树
void Search_lchild(Bitree *p,char parents,Bitree *k)
{
if ((*p)->data==parents)
{
if((*p)->lchild)
{
*k= (*p)->lchild ; //查找左子树
//Deletel(*k);
}
}
else
{
if((*p)->lchild) Search_lchild(&(*p)->lchild,parents,&(*k));
if((*p)->rchild) Search_lchild(&(*p)->rchild,parents,&(*k));
}
void Deletel(Bitree *p)
{
Bitree *t;
t=p;
if((*t))
{
Deletel(&(*t)->lchild);
Deletel(&(*t)->rchild);
free(*t);
//(*p)=NULL;
}
//(*p)=NULL;
}
2.2.2.3删除程序实现提示:
(1).键盘输入所要删除的结点,程序进行查找;(2).执行删除操作。
2.2.3结点的插入
2.2.
3.1功能说明:在给定一棵二叉树中插入新结点2.2.3.2插入结点的程序代码:
//插入左结点
void Insert_lchild(Bitree *p,char childl,char child)
{
Bitree q,k;
if(*p)
{
if((*p)->data==childl) //找到结点
{
q=(Bitree)malloc(sizeof(Bitree));
q->data=child;
if(!(*p)->lchild) //左结点不存在
{
(*p)->lchild=q;
(*p)->lchild->lchild=NULL;
(*p)->lchild->rchild=NULL;
}
else //左结点存在
{
k=(*p)->lchild;
(*p)->lchild=q;
q->lchild=k;
}
}