实验4树图及其应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验4 树、图及其应用
————二叉树的遍历
一、任务和目的
具体任务,达到的目的。
设计一个程序演示在二叉树上进行三种遍历的过程。
【基本要求】
(1)从键盘上输入二叉树的每一个结点,演示二叉树T的建立过程。
(2)演示各种遍历的遍历过程。
二、概要设计
主要数据结构定义,函数功能及各参数用途。
#include
#include
#include
#include
struct bitnode
{
char data;
struct bitnode *lchild, *rchild;
}bitnode;//树叶结构体定义
void createbitree(struct bitnode ** t);//建立二叉树(用前序法)
void visit(struct bitnode *e);//输出结点
void preordertraverse(struct bitnode *t);//前序遍历
void choose_menu();//选择菜单
void inordertraverse(struct bitnode *t);//中序遍历
void postordertraverse(struct bitnode *t);//后序遍历
三、详细设计
各函数具体实现。
//建立二叉树(用前序法)
void createbitree(struct bitnode ** t)
{
char x;
struct bitnode *q;
printf("\n 请输入数据");
x=getchar();
if(x!='#') getchar();
if (x=='#')
{
getchar();
printf(" 该节点为空\n");
return;
}
q=(struct bitnode*)malloc(sizeof(struct bitnode));
q->data=x;
q->lchild=NULL;
q->rchild=NULL;
*t=q;
printf(" 数据是: %c, 此数据地址是: %o\n",q->data,q);
createbitree(&q->lchild);
createbitree(&q->rchild);
return;
}//用递归法创建二叉树(附加地址数据左右孩子结点的地址)
//如果输入#则表示孩子结点为空
//输出结点
void visit(struct bitnode *e)
{
printf(" 结点数据是: %c, 结点的地址是: %o,\n 结点的左孩子地址是: %o, 结点的右孩子地址是: %o\n",e->data,e,e->lchild,e->rchild);
printf("\n输入任意键继续。。。。\n");
getchar();
}
//前序遍历
void preordertraverse(struct bitnode *t)
{
struct bitnode *p;
p=t;
if(p)
{
visit(p);
preordertraverse(p->lchild);
preordertraverse(p->rchild);
return ;
}
else
return ;
}
//中序遍历
void inordertraverse(struct bitnode *t)
{
struct bitnode *p;
p=t;
if(p)
{
inordertraverse(p->lchild);
visit(p);
inordertraverse(p->rchild);
return ;
}
else
return ;
}
//后序遍历
void postordertraverse(struct bitnode *t)
{
struct bitnode *p;
p=t;
if(p)
{
postordertraverse(p->lchild);
postordertraverse(p->rchild);
visit(p);
return ;
}
else
return ;
}
//选择菜单
void choose_menu(struct bitnode * t)
{
int x;
system("cls");
printf("1.->先根遍历二叉树\n");
printf("2.->中根遍历二叉树\n");
printf("3.->后根遍历二叉树\n");
printf("4.->退出\n");
scanf("%d",&x);
getchar();
switch(x)
{
case 1 :
preordertraverse(t);
printf("以上是前序遍历的过程...\n");
getchar();
choose_menu(t);
break;
case 2 :
inordertraverse(t);
printf("以上是中序遍历的过程...\n");