实验4树图及其应用

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

相关文档
最新文档