二叉树数据结构课程设计报告

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

}

}

相关文档
最新文档