C语言综合实验设计报告数据结构二叉树的遍历Word格式文档下载.docx

上传人:b****5 文档编号:20898239 上传时间:2023-01-26 格式:DOCX 页数:12 大小:67.73KB
下载 相关 举报
C语言综合实验设计报告数据结构二叉树的遍历Word格式文档下载.docx_第1页
第1页 / 共12页
C语言综合实验设计报告数据结构二叉树的遍历Word格式文档下载.docx_第2页
第2页 / 共12页
C语言综合实验设计报告数据结构二叉树的遍历Word格式文档下载.docx_第3页
第3页 / 共12页
C语言综合实验设计报告数据结构二叉树的遍历Word格式文档下载.docx_第4页
第4页 / 共12页
C语言综合实验设计报告数据结构二叉树的遍历Word格式文档下载.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

C语言综合实验设计报告数据结构二叉树的遍历Word格式文档下载.docx

《C语言综合实验设计报告数据结构二叉树的遍历Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言综合实验设计报告数据结构二叉树的遍历Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。

C语言综合实验设计报告数据结构二叉树的遍历Word格式文档下载.docx

再用图形显示创建好的树,进行先序,中序,后序遍历。

遍历时显示每个结点的过程。

最后关闭图形。

三主要问题的解决方法及技术关键

_存在的主要问题是在手动创建树时怎样输入结点,当选择“人工手动建立”时,在提示后依次输入26个字符或数字,每行一个。

此时树就能建立,然后用图形显示出来。

本程序的技术关键是建立二叉树和图形显示遍历的过程,分别用到Tree*CreatTree(),VoidDrawTree(Tree*t)等函数。

遍历结束后,图形关闭。

四流程图

五程序清单

/********tree2.c二叉树演示********/

#include<

graphics.h>

stdio.h>

stdlib.h>

dos.h>

time.h>

typedefstructTREE

{

chardata;

/*树的结点数据*/

structTREE*lchild;

structTREE*rchild;

intx;

/*树的x坐标*/

inty;

/*树的y坐标*/

}Tree;

structOUTPUT

/*三种遍历的x坐标*/

/*三种遍历的y坐标*/

intnum;

}s;

intnodeNUM=0;

/*统计当前的结点数字,最多26个*/

charway;

/*自动建立树和手动建立树的标志,2手动,1自动*/

charstr[3];

/*显示结点数据的字符串*/

voidInit();

/*图形初始化*/

voidClose();

/*图形关闭*/

Tree*CreatTree();

/*文本模式下创建树的过程*/

Tree*InitTree(inth,intt,intw);

/*创建树,h层次,t横坐标,w树之间的宽度,n树的建立方式*/

voidDrawTree(Tree*t);

/*用图形显示创建好的树*/

voidPreorder(Tree*t);

/*前序遍历*/

voidMidorder(Tree*t);

/*中序遍历*/

voidPosorder(Tree*t);

/*后序遍历*/

voidDrawNode(Tree*t,intcolor);

/*遍历时显示每个结点的过程*/

voidClrScr();

/*清空树的区域*/

voidmain()

Tree*root;

randomize();

root=CreatTree();

/*创建树*/

Init();

DrawTree(root);

/*每次遍历前显示白色的树*/

sleep

(1);

s.x=100;

s.y=300;

s.num=1;

/*每次遍历前设置显示遍历顺序显示的x,y坐标*/

Preorder(root);

getch();

ClrScr();

s.y=350;

s.num=1;

Midorder(root);

s.y=400;

Posorder(root);

Close();

}

voidClrScr()

setcolor(BLACK);

setfillstyle(SOLID_FILL,BLACK);

bar(0,20,640,280);

Tree*CreatTree()

clrscr();

printf("

pleaseinputn\n"

);

putercreat\n"

2.peoplecreat\n"

way=getch();

/*输入创建树的方法,1电脑自动建立,2人工手动建立*/

if(way!

='

2'

way='

1'

;

/*其他数字默认自动建立*/

if(way=='

)/*手动建立提示输入结点*/

Pleasecreatthetree\n"

root=InitTree(1,320,150);

system("

pause"

returnroot;

/*生成二叉树,h表示层次,t表示横坐标,w表示结点左右子树的宽度,随机数n确定结点是空或非空,如n为0,则为空*,但要限定确保结点数不少于三个*/

Tree*InitTree(inth,intt,intw)

charch;

intn;

/*自动建立时随机赋值判断是否是NULL的标志*/

Tree*node;

)/*手动建立需要自己输入*/

scanf("

%c"

&

ch);

else/*自动建立的赋值*/

{

n=random(5);

if(n==0&

&

nodeNUM>

=3)/*随机赋值时候确保自动建立的二叉树有三个结点*/

ch='

.'

else

ch=65+random(25);

}

if(ch=='

)/*输入空格代表NULL*/

returnNULL;

if(h==6||nodeNUM==26)/*如果树的层次已经到5或者结点树到达26个就自动返回NULL*/

node=(Tree*)malloc(sizeof(Tree));

node->

data=ch;

x=t;

/*树的x坐标是传递过来的横坐标*/

y=h*50;

/*树的y坐标与层次大小有关*/

nodeNUM++;

lchild=InitTree(h+1,t-w,w/2);

rchild=InitTree(h+1,t+w,w/2);

returnnode;

voidDrawTree(Tree*t)

if(t!

=NULL)

fillellipse(t->

x,t->

y,9,9);

setcolor(WHITE);

circle(t->

y,10);

/*画圆*/

sprintf(str,"

t->

data);

/*将内容转换成字符串输出*/

outtextxy(t->

x-3,t->

y-2,str);

if(t->

lchild!

=NULL)/*左子树*/

line(t->

x-5,t->

y+12,t->

lchild->

x+5,t->

y-12);

DrawTree(t->

lchild);

rchild!

=NULL)/*右子树*/

rchild->

rchild);

voidDrawNode(Tree*t,intcolor)

setcolor(YELLOW);

setfillstyle(SOLID_FILL,YELLOW);

y,10,10);

setcolor(RED);

setcolor(color);

outtextxy(s.x,s.y,str);

%d"

s.num);

/*将遍历次序用数字显示在树的结点上*/

y-20,str);

s.num++;

voidPreorder(Tree*t)

s.x+=15;

DrawNode(t,GREEN);

Preorder(t->

voidMidorder(Tree*t)

Midorder(t->

DrawNode(t,YELLOW);

voidPosorder(Tree*t)

Posorder(t->

DrawNode(t,BLUE);

voidInit()

intgd=DETECT,gm;

initgraph(&

gd,&

gm,"

c:

\\tc"

cleardevice();

outtextxy(250,10,"

anykeytocontinue"

outtextxy(20,300,"

preorder"

outtextxy(20,350,"

midorder"

outtextxy(20,400,"

posorder"

voidClose()

closegraph();

六设计结果说明

本程序主函数简洁易懂,用了坐标设定树结点的位置,使运算方便。

设置了选择功能,其中自动创建起着示范作用,还显示出程序的自动化程度。

调用了众多功能函数,且函数表达较详细。

用图形显示了遍历的经过使人更好地明白二叉树的遍历。

不足的是在手动建立树时,没有清楚说明运用的变量的性质,让使用者在输入数据时产生疑惑,且有些具体函数的作用没有很好的体现。

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

当前位置:首页 > 工作范文 > 行政公文

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

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