实验四二叉树子系统.docx

上传人:b****3 文档编号:777656 上传时间:2022-10-12 格式:DOCX 页数:9 大小:17.05KB
下载 相关 举报
实验四二叉树子系统.docx_第1页
第1页 / 共9页
实验四二叉树子系统.docx_第2页
第2页 / 共9页
实验四二叉树子系统.docx_第3页
第3页 / 共9页
实验四二叉树子系统.docx_第4页
第4页 / 共9页
实验四二叉树子系统.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

实验四二叉树子系统.docx

《实验四二叉树子系统.docx》由会员分享,可在线阅读,更多相关《实验四二叉树子系统.docx(9页珍藏版)》请在冰豆网上搜索。

实验四二叉树子系统.docx

实验四二叉树子系统

实验四-二叉树子系统

 

韶关学院

学生实验报告册

 

实验课程名称:

数据结构与算法

实验项目名称:

实验四二叉树子系统

实验类型(打√):

(基础√、综合、设计)

 

院系:

计算机科学学院专业:

计算机科学技术

姓名:

***学号:

*****

指导老师:

陈正铭

 

韶关学院教务处编制

一、实验预习报告内容

预习日期:

2011年9月18日

【实验目的】

(1)掌握二叉树的特点及其存储的方式。

(2)掌握二叉树的创建和显示方法。

(3)复习二叉树遍历的概念,掌握二叉树遍历的方法

(4)掌握求二叉树的叶结点数、总结点数和深度等算法。

【实验内容】

(1)按屏幕提示用前序方法建立一棵二叉树,并能按凹入法显示二叉树结构;

(2)编写前序遍历、中序遍历、后序遍历、层次遍历程序。

(3)编写求二叉树的叶结点数、总结点数和深度的程序。

(4)设计一个选择式菜单,以菜单方式选择下列操作。

二叉树子系统

********************************************

*1---------建二叉树*

*2---------凹入显示*

*3---------先序遍历*

*4---------中序遍历*

*5---------后序遍历*

*6---------层次遍历*

*7---------求叶子数*

*8---------求结点数*

*9---------求树深度*

*0---------返回*

********************************************

请选择菜单号:

三、实验报告内容

2011年9月21日

【实验程序主要代码】:

#include

#defineTREEMAX100

typedefstructBT//定义二叉树结构体

{chardata;

BT*lchild;

BT*rchild;

}BT;

BT*CreateTree();

voidShowTree(BT*T);

voidPreorder(BT*T);

voidPostorder(BT*T);

voidLevelorder(BT*T);

voidInorder(BT*T);

voidLeafnum(BT*T);

voidNodenum(BT*T);

intTreeDepth(BT*T);

intcount=0;//定义计算结点个数的变量

voidmain()

{

BT*T=NULL;

charch1,ch2,a;

ch1='y';

while(ch1=='y'||ch1=='Y')

{printf("\n");

printf("\n\t\t二叉树子系统");

printf("\n\t\t************************************");

printf("\n\t\t*1------建二叉树*");

printf("\n\t\t*2------凹入显示*");

printf("\n\t\t*3------先序遍历*");

printf("\n\t\t*4------中序遍历*");

printf("\n\t\t*5------后序遍历*");

printf("\n\t\t*6------层次遍历*");

printf("\n\t\t*7------求叶子数*");

printf("\n\t\t*8------求结点数*");

printf("\n\t\t*9------求树深度*");

printf("\n\t\t*0------返回*");

printf("\n\t\t************************************");

printf("\n\t\t请选择菜单号(0--9):

");

scanf("%c",&ch2);

getchar();

printf("\n");

switch(ch2)

{case'1':

printf("\n\t\t请按先序序列输入二叉树的结点:

\n");

printf("\n\t\t说明:

输入结点('0'表示后继结点为空)后按回车.\n");

printf("\n\t\t请输入根结点:

");

T=CreateTree();

printf("\n\t\t二叉树成功建立!

\n");break;

case'2':

ShowTree(T);break;

case'3':

printf("\n\t\t该二叉树的先序遍历序列为:

");

Preorder(T);break;

case'4':

printf("\n\t\t该二叉树的中序遍历序列为:

");

Inorder(T);break;

case'5':

printf("\n\t\t该二叉树的后序遍历序列为:

");

Postorder(T);break;

case'6':

printf("\n\t\t该二叉树的层次遍历序列为:

");

Levelorder(T);break;

case'7':

count=0;Leafnum(T);

printf("\n\t\t该二叉树有%d个叶子。

\n",count);break;

case'8':

count=0;Nodenum(T);

printf("\n\t\t该二叉树总共有%d个结点。

\n",count);break;

case'9':

printf("\n\t\t该树的深度是:

%d",TreeDepth(T));break;

case'0':

ch1='n';break;

default:

printf("\n\t\t***请注意:

输入有误!

***");

}

if(ch2!

='0')

{printf("\n\n\t\t按回车键继续,按任意键返回主菜单!

\n");

a=getchar();

if(a!

='\xA')

{getchar();ch1='n';}

}

}

}

BT*CreateTree()//建立二叉树

{BT*t;

charx;

scanf("%c",&x);

getchar();

if(x=='0')

t=NULL;

else

{t=newBT;

t->data=x;

printf("\n\t\t请输入%c结点的左子结点:

",t->data);

t->lchild=CreateTree();

printf("\n\t\t请输入%c结点的右子结点:

",t->data);

t->rchild=CreateTree();

}

returnt;

}

voidPreorder(BT*T)//先序遍历

{if(T)

{printf("%3c",T->data);

Preorder(T->lchild);

Preorder(T->rchild);

}

}

voidInorder(BT*T)//中序遍历

{if(T)

{Inorder(T->lchild);

printf("%3c",T->data);

Inorder(T->rchild);

}

}

voidPostorder(BT*T)//后序遍历

{if(T)

{Postorder(T->lchild);

Postorder(T->rchild);

printf("%3c",T->data);

}

}

voidLevelorder(BT*T)//层次遍历

{inti,j;

BT*q[100],*p;

p=T;

if(p!

=NULL)

{i=1;q[i]=p;j=2;}

while(i!

=j)

{p=q[i];printf("%3c",p->data);

if(p->lchild!

=NULL)

{q[j]=p->lchild;j++;}

if(p->rchild!

=NULL)

{q[j]=p->rchild;j++;}

i++;

}

}

voidLeafnum(BT*T)//求叶子数

{if(T)

{if(T->lchild==NULL&&T->rchild==NULL)

count++;

Leafnum(T->lchild);

Leafnum(T->rchild);

}

}

voidNodenum(BT*T)//求结点数

{if(T)

{count++;

Nodenum(T->lchild);

Nodenum(T->rchild);

}

}

intTreeDepth(BT*T)//求树深度

{intldep,rdep;

if(T==NULL)

return0;

else

{ldep=TreeDepth(T->lchild);

rdep=TreeDepth(T->rchild);

if(ldep>rdep)

returnldep+1;

elsereturnrdep+1;

}

}

voidShowTree(BT*T)//凹入法显示二叉树

{BT*stack[TREEMAX],*p;

intlevel[TREEMAX][2],top,n,i,width=4;

if(T!

=NULL)

{printf("\n\t\t凹入表示法:

\n\t\t");

top=1;

stack[top]=T;

level[top][0]=width;

while(top>0)

{p=stack[top];

n=level[top][0];

for(i=1;i<=n;i++)

printf("");

printf("%c",p->data);

for(i=n+1;i<30;i+=2)

printf("▃");

printf("\n\t\t");

top--;

if(p->rchild!

=NULL)

{top++;

stack[top]=p->rchild;

level[top][0]=n+width;

level[top][1]=2;

}

if(p->lchild!

=NULL)

{top++;

stack[top]=p->lchild;

level[top][0]=n+width;

level[top][1]=1;

}

}

}

}

 

实验报告评分:

注:

1、如有个别实验的实验报告内容多,实验报告册页面不够写,或有识图,画图要求的,学生应根据实

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

当前位置:首页 > 人文社科 > 教育学心理学

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

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