二叉树结点的左右子树交换课程设计报告Word文件下载.docx

上传人:b****6 文档编号:19836185 上传时间:2023-01-10 格式:DOCX 页数:11 大小:105.29KB
下载 相关 举报
二叉树结点的左右子树交换课程设计报告Word文件下载.docx_第1页
第1页 / 共11页
二叉树结点的左右子树交换课程设计报告Word文件下载.docx_第2页
第2页 / 共11页
二叉树结点的左右子树交换课程设计报告Word文件下载.docx_第3页
第3页 / 共11页
二叉树结点的左右子树交换课程设计报告Word文件下载.docx_第4页
第4页 / 共11页
二叉树结点的左右子树交换课程设计报告Word文件下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

二叉树结点的左右子树交换课程设计报告Word文件下载.docx

《二叉树结点的左右子树交换课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《二叉树结点的左右子树交换课程设计报告Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。

二叉树结点的左右子树交换课程设计报告Word文件下载.docx

该功能流程图(图2-1)如下:

 

三详细设计

本课题为二叉树结点的左、右子树的交换,主要分为三个模块:

各模块的详细设计如下:

首先定义结构体类型及二叉树结点类型,如下所示:

typedefchardatatype;

//树的结点数据类型为字符型,可以根据需要修改

typedefstructnode*pointer;

//定义二叉树结点类型

structnode{

datatypedata;

//结点数据

pointerlchild,rchild;

//左右孩子结点

};

三个模块各写三个函数,分别如下所示:

bitreelevel_creat()//由层次序列建立二叉树,返回根指针

{

charch;

ch=cin.get();

intfront,rear;

pointerroot,s;

root=NULL;

//置空二叉树

front=rear=0;

//置空队列

//while(cin>

>

ch,ch!

='

!

'

while(cin>

{

if(ch!

@'

)//非虚结点,建立新结点

{

s=newnode;

s->

data=ch;

lchild=s->

rchild=NULL;

}

elses=NULL;

rear++;

Q[rear]=s;

//不管结点是否为虚都要入队

if(rear==1){root=s;

front=1;

}//第一个点是根,要修改头指针,他不是孩子

elseif(s&

&

Q[front])//孩子和双亲都不是虚结点

if(rear%2==0)Q[front]->

lchild=s;

//rear是偶数,新结点是左孩子

else

{

Q[front]->

rchild=s;

//rear是奇数,新结点是右孩子

front++;

}

}

returnroot;

}

voidexchange(bitreet)//交换左右子数函数

pointerp;

if(t==NULL)return;

//空树,直接返回

p=t->

lchild;

t->

lchild=t->

rchild;

rchild=p;

//交换

exchange(t->

rchild);

//遍历原左子树

lchild);

//遍历原右子树

voidpreorder(bitreet)//先根遍历函数

if(t==NULL)

return;

cout<

<

t->

data<

"

"

;

//先访问跟

preorder(t->

//先根遍历左子树

//先根遍历右子树

flag=1;

四调试分析和测试结果

本人主要编写main()函数及先根遍历函数,主函数还是比较简单,就是先根遍历函数有一个小问题:

输入的的第一个树即根结点始终打印不出来,分析代码,也没发现什么错误,比较纠结。

下面是测试结果截图:

图4-1为程序运行首页。

图4-1

图4-2为输入二叉树结点的界面。

图4-2

图4-3为操作菜单。

图4-3

图4-4为左右二叉树交换成功。

图4-4

图4-5为先根遍历输出结果。

图4-5

五总结

在刚选到该课题的时候,感觉挺茫然的,不知从何处入手。

毕竟一个寒假过来,上学期学的数据结构知识也忘的差不多了,并且学的也不是很扎实,所以感觉无从下手。

在队友的相互帮助下,我们开始加紧的看书,去图书馆借资料以及上网进行搜索相关的资料,并慢慢的开始做起来。

我们这组三人,分工也比较明确,各自主要负责自己的模块。

二本人负责先序遍历模块以及主函数的的编写。

在编码过程中,我们遇到了很多小问题,以及一些因粗心而造成的错误,我们都一一解决了。

只是我这个环节还有一个问题没有得到解决,就是输出先根遍历的结果时根节点没输出来。

这个问题困扰我两天,一直没有得到解决。

这个需要以后再继续学习、探究。

总的来说,由于时间有限,本次课程设计“马马虎虎”地完成了。

从理论到实践,在整整一个星期的日子里,我学到很多很多的东西,不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的内容。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才是真正的知识,才能提高自己的实际动手能力和独立思考的能力。

六参考文献

1.严蔚敏吴伟明数据结构(C语言版)--清华大学出版社

2.csdn论坛网址:

七致谢

完成该课题的设计,离不开队友的相互配合、同学的帮助及老师的指导,在此表示十分感谢!

八附录

//源代码

#include<

iostream>

#include<

process.h>

conio.h>

usingnamespacestd;

/*二叉树类型的定义(二叉链表形式储存)*/

typedefpointerbitree;

//定义二叉树类型

/*先根遍历交换左右子树*/

/*层次遍历序列生成*/

constintmaxsize=100;

intflag=0;

pointerQ[maxsize+1];

/*交换左右子数*/

voidexchange(bitreet)

/*二叉树的先根遍历*/

voidpreorder(bitreet)//先根遍历

/*voidstop()

//cout<

\n按任意键继续:

getch();

}*/

voidmain()

bitreeT=NULL;

intch;

首先层次遍历序列生成二叉树,请输入结点数据(输入'

为虚结点,输入'

结束):

\n"

T=level_creat();

if(T==NULL)

cout<

\n\n\t\t二叉树生成失败!

\n按任意键返回菜单:

getch();

else

\n\n\t\t二叉树生成成功!

AA:

do{

system("

cls"

);

//调用清屏函数

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓"

┃二叉树左右子树交┃"

┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫"

┃\t\t1.重新建立二叉树┃"

┃\t\t2.交换左右子数┃"

┃\t\t3.先根遍历二叉树┃"

┃\t\t0.退出┃"

┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛"

\t\t请选择数字(0-3):

cin>

ch;

switch(ch)

case0:

break;

case1:

system("

cout<

getch();

break;

case2:

exchange(T);

\n\n\t\t左右子树交换成功!

case3:

\n先根遍历二叉树结果:

preorder(T);

if(flag)

{

cout<

\n\n按任意键返回菜单:

getch();

}

cout<

endl;

default:

cout<

\n\n\t\t您输入错误!

请重新输入:

\n\n"

gotoAA;

}while(ch!

=0);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 工作计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1