数据结构实验7二叉树子系统.docx

上传人:b****7 文档编号:9512541 上传时间:2023-02-05 格式:DOCX 页数:20 大小:219.57KB
下载 相关 举报
数据结构实验7二叉树子系统.docx_第1页
第1页 / 共20页
数据结构实验7二叉树子系统.docx_第2页
第2页 / 共20页
数据结构实验7二叉树子系统.docx_第3页
第3页 / 共20页
数据结构实验7二叉树子系统.docx_第4页
第4页 / 共20页
数据结构实验7二叉树子系统.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

数据结构实验7二叉树子系统.docx

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

数据结构实验7二叉树子系统.docx

数据结构实验7二叉树子系统

验证性实验7:

二叉树子系统

班级学号BX100420姓名施程程成绩

1.实验目的

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

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

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

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

2.实验内容

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

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

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

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

二叉树子系统

********************************************");

*1---------建二叉树*");

*2---------凹入显示*");

*3---------先序遍历*");

*4---------中序遍历*");

*5---------后序遍历*");

*6---------层次遍历*");

*7---------求叶子数*");

*8---------求结点数*");

*9---------求树深度*");

*0---------返回*");

********************************************");

请选择菜单号(0--9):

3.实验步骤:

(1)输入并调试程序;

(2)按下图建立二叉树;

 

 

二叉树子系统

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

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

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

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

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

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

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

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

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

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

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

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

请选择菜单号:

1

请输入按先序建立二叉树的结点序列:

说明:

'0'代表后继结点为空,请逐个输入,按回车键输入下一结点。

请输入根结点:

a

请输入a结点的左子结点:

b

请输入b结点的左子结点:

d

请输入d结点的左子结点:

0

请输入d结点的右子结点:

0

请输入b结点的右子结点:

0

请输入a结点的右子结点:

c

请输入c结点的左子结点:

e

请输入e结点的左子结点:

0

请输入e结点的右子结点:

0

请输入c结点的右子结点:

f

请输入f结点的左子结点:

0

请输入f结点的右子结点:

0

(3)检查凹入法显示的二叉树是否正确;

二叉树子系统

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

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

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

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

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

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

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

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

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

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

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

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

请选择菜单号:

2

凹入表示法:

a▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃

b▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃

d▃▃▃▃▃▃▃▃▃▃▃▃▃

c▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃▃

e▃▃▃▃▃▃▃▃▃▃▃▃▃

f▃▃▃▃▃▃▃▃▃▃▃▃▃

按回车键返回主菜单!

(4)检查其他算法的正确性举例:

二叉树子系统

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

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

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

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

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

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

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

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

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

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

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

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

请选择菜单号:

3

该二叉树的先序遍历序列为:

abdcef

4.实验程序

#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按【Enter】键继续,按任意键返回主菜单!

\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;

else

returnrdep+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;

}

}

}

}

5.程序运行

6.实验小结

本章要求我们掌握的是二叉树的特点、存储方式、创建、显示、遍历以及节点数等计算方法。

这个实验要求设计的是一颗二叉树,要求能用凹入法显示二叉树的结构,能读出前序遍历、中序遍历、后序遍历和层次遍历,以及会求解叶节点数、总节点数和树的深度。

在输入程序的时候有些错误,但在编译和构建的时候都改正了,执行起来很方便。

程序中在后面注释的帮助下也能知道相应程序的作用,结合上课听到的知识更容易理解了,这对我是一个不小的帮助。

当然,在编译时发现错误的时候,改正也能帮我巩固记忆,让我知道什么地方错了,也能更好的学习并记住,争取以后不会再犯同样的错误。

总的来说,本次实验还是成功的。

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

当前位置:首页 > 总结汇报 > 实习总结

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

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