完整word版二叉树的基本操作实验.docx

上传人:b****3 文档编号:4897300 上传时间:2022-12-11 格式:DOCX 页数:10 大小:88.96KB
下载 相关 举报
完整word版二叉树的基本操作实验.docx_第1页
第1页 / 共10页
完整word版二叉树的基本操作实验.docx_第2页
第2页 / 共10页
完整word版二叉树的基本操作实验.docx_第3页
第3页 / 共10页
完整word版二叉树的基本操作实验.docx_第4页
第4页 / 共10页
完整word版二叉树的基本操作实验.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

完整word版二叉树的基本操作实验.docx

《完整word版二叉树的基本操作实验.docx》由会员分享,可在线阅读,更多相关《完整word版二叉树的基本操作实验.docx(10页珍藏版)》请在冰豆网上搜索。

完整word版二叉树的基本操作实验.docx

完整word版二叉树的基本操作实验

实验三二叉树的基本运算

一、实验目的

1、使学生熟练掌握二叉树的逻辑结构和存储结构.

2、熟练掌握二叉树的各种遍历算法。

二、实验内容

[问题描述]

建立一棵二叉树,试编程实现二叉树的如下基本操作:

1。

按先序序列构造一棵二叉链表表示的二叉树T;

2。

对这棵二叉树进行遍历:

先序、中序、后序以及层次遍历,分别输出结点的遍历序列;

3.求二叉树的深度/结点数目/叶结点数目;(选做)

4.将二叉树每个结点的左右子树交换位置。

(选做)

[基本要求]

从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),

[测试数据]

如输入:

ABCффDEфGффFффф(其中ф表示空格字符)

则输出结果为

先序:

ABCDEGF

中序:

CBEGDFA

后序:

CGEFDBA

层序:

ABCDEFG

[选作内容]

采用非递归算法实现二叉树遍历。

三、实验前的准备工作

1、掌握树的逻辑结构.

2、掌握二叉树的逻辑结构和存储结构。

3、掌握二叉树的各种遍历算法的实现.

一实验分析

本次试验是关于二叉树的常见操作,主要是二叉树的建立和遍历。

二叉树的遍历有多种方法,本次试验我采用递归法,递归法比较简单。

二概要设计

功能实现

1.intCreatBiTree(BiTree&T)用递归的方法先序建立二叉树,并用链表储存该二叉树

2.intPreTravel(BiTree&T)前序遍历

3。

intMidTravel(BiTree&T)中序遍历

4。

intPostTravel(BiTree&T)后序遍历

5。

intDepth(BiTree&T)//计算树的深度

6。

inthowmuch(BiTreeT,inth)采用树节点指针数组,用于存放遍历到的元素地址,如果有左孩子,存入地址,j加一,否则没操作,通过访问数组输出层次遍历的结果。

k计算叶子数,j为总节点.

7。

intexchang(BiTree&T)交换左右子树,利用递归,当有左右孩子时才交换

三详细设计

#include〈stdio.h>

#include〈stdlib.h>

typedefstructBiTNode

chardata;

structBiTNode*lchild,*rchild;

}BiTNode,*BiTree;

intCreatBiTree(BiTree&T)

{//先序法创建二叉树

charch;

if((ch=getchar())=='’)

T=NULL;

else

T=(BiTNode*)malloc(sizeof(BiTNode));

if(!

T)

exit

(1);

T-〉data=ch;

CreatBiTree(T-〉lchild);

CreatBiTree(T-〉rchild);

}

return0;

intPreTravel(BiTree&T)

{//前序遍历

if(T)

printf("%c",T—>data);

PreTravel(T—〉lchild);

PreTravel(T—>rchild);

return0;

intMidTravel(BiTree&T)

{//中序遍历

if(T)

MidTravel(T—〉lchild);

printf("%c",T-〉data);

MidTravel(T-〉rchild);

return0;

}

intPostTravel(BiTree&T)

{//后序遍历

if(T)

PostTravel(T-〉lchild);

PostTravel(T-〉rchild);

printf(”%c",T-〉data);

}

return0;

inthowmuch(BiTreeT,inth)

{

BiTNode*Q[100];//树节点指针数组,用于存放遍历到的元素地址

if(T==NULL)

printf(”空的二叉树\n”);

Q[0]=T;//存入树根

inti,k=0;

intj=1;//j为总节点

for(i=0;i〈j;i++)

if(Q[i]-〉lchild!

=NULL)//如果有左孩子,存入地址,j加一,否则没操作

{

Q[j]=Q[i]—〉lchild;

j++;

if(Q[i]->rchild!

=NULL)//如果有右孩子,存入地址,j加一,否则没操作

{

Q[j]=Q[i]—〉rchild;

j++;

}

if(Q[i]—〉lchild==NULL&&Q[i]->rchild==NULL)

k++;//计算叶子数

if(h==0)

printf(”%d",j);

elseif(h==1)

printf(”%d”,k);

elseif(h==2)

{

for(i=0;i

printf(”%c”,Q[i]-〉data);

else

{

printf(”参数错误");

return0;

intDepth(BiTree&T)//计算树的深度

intlh,rh;

if(NULL==T)

return0;

else

lh=Depth(T-〉lchild);

rh=Depth(T—>rchild);

return(lh〉rh?

lh:

rh)+1;

}

}

intexchang(BiTree&T)//交换左右子树

{

if(T!

=NULL)

if(T—>lchild!

=NULL&&T-〉rchild!

=NULL)//当有左右孩子时才交换

{

chart;

t=T-〉lchild—〉data;

T—>lchild—〉data=T->rchild-〉data;

T—〉rchild—〉data=t;//交换数据

exchang(T-〉lchild);//递归调用

exchang(T—〉rchild);

return0;

intchoose(BiTreeT)//功能选

inta;

scanf(”%d”,&a);

if(a==1)

printf(”先序遍历:

”);

PreTravel(T);

}

elseif(a==2)

printf(”中序遍历:

”);

MidTravel(T);

elseif(a==3)

{

printf(”后序遍历:

");

PostTravel(T);

elseif(a==4)

printf("层序遍历:

”);

howmuch(T,2);

elseif(a==5)

printf(”总节点数:

");

howmuch(T,0);

}

elseif(a==6)

{

printf(”总叶子数:

”);

howmuch(T,1);

}

elseif(a==7)

printf("树的深度:

”);

printf(”%d”,Depth(T));

}

elseif(a==8)

{

printf("交换前\n”);

howmuch(T,2);

exchang(T);

printf("交换后\n”);

howmuch(T,2);

elseif(a==9)

exit

(1);

elseprintf(”没有这个操作\n”);

printf("操作完成,请输入下一个操作\n");

choose(T);

return0;

}

intmain()//主函数

{

printf("—-————--——--——--二叉树的基本操作-————-——--——-—-—\n");

printf(”请先建立二叉树,按先序的方式输入如果数据为空输入空格\n”);

BiTreeT;//定义二叉树,初始化

CreatBiTree(T);

choose(T);

return0;

}

四用户手册

根据程序的提示按先序输入二叉树,如果数据为空输入空格,然后回车,输入你要进行的操作的序号.1.先序遍历、2中序遍历、3后序遍历、4层次遍历、5总节点数、6总叶子数、7树的深度、8交换左右子树、9结束操作

五实验总结

通过实验,我熟悉二叉树树的基本操作,掌握二叉树的实现以及实际应用。

加深了对二叉树的理解,逐步培养解决实际问题的编程能力以及进一步了解了二叉树。

递归的使用,要注意,初始时的状态以及如何使用递归,注意普遍性,思考时从普通的开始。

通过这次上机操作,让我明白书本上的程序一定要自己去调试,这样才能将书本程序与老师讲的内容融会贯通,达到温故而知新。

六运行结果

(1)

 

图表1

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

当前位置:首页 > 法律文书 > 调解书

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

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