二叉树的基本操作实验文档格式.doc
《二叉树的基本操作实验文档格式.doc》由会员分享,可在线阅读,更多相关《二叉树的基本操作实验文档格式.doc(8页珍藏版)》请在冰豆网上搜索。
层序:
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为总节点。
H=0
printf("
%d"
j)
h==1
真
k)
h==2
for(i=0;
i<
j;
i++)
%c"
Q[i]->
data)
参数错误"
)
假
7.intexchang(BiTree&
T)交换左右子树,利用递归,当有左右孩子时才交换
三详细设计
#include<
stdio.h>
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(!
exit
(1);
T->
data=ch;
CreatBiTree(T->
lchild);
rchild);
}
return0;
}
intPreTravel(BiTree&
{//前序遍历
if(T)
{
printf("
T->
data);
PreTravel(T->
intMidTravel(BiTree&
{//中序遍历
MidTravel(T->
intPostTravel(BiTree&
{//后序遍历
PostTravel(T->
inthowmuch(BiTreeT,inth)
BiTNode*Q[100];
//树节点指针数组,用于存放遍历到的元素地址
if(T==NULL)
空的二叉树\n"
);
Q[0]=T;
//存入树根
inti,k=0;
intj=1;
//j为总节点
for(i=0;
if(Q[i]->
lchild!
=NULL)//如果有左孩子,存入地址,j加一,否则没操作
{
Q[j]=Q[i]->
lchild;
j++;
}
rchild!
=NULL)//如果有右孩子,存入地址,j加一,否则没操作
rchild;
lchild==NULL&
&
Q[i]->
rchild==NULL)
k++;
//计算叶子数
if(h==0)
j);
elseif(h==1)
k);
elseif(h==2)
for(i=0;
else
intDepth(BiTree&
{
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->
=NULL&
T->
=NULL)//当有左右孩子时才交换
chart;
t=T->
lchild->
data;
T->
data=T->
rchild->
data=t;
//交换数据
exchang(T->
//递归调用
}
intchoose(BiTreeT)//功能选
inta;
scanf("
&
a);
if(a==1)
先序遍历:
"
PreTravel(T);
elseif(a==2)
中序遍历:
MidTravel(T);
elseif(a==3)
后序遍历:
PostTravel(T);
elseif(a==4)
层序遍历:
howmuch(T,2);
elseif(a==5)
总节点数:
howmuch(T,0);
elseif(a==6)
总叶子数:
howmuch(T,1);
elseif(a==7)
树的深度:
Depth(T));
elseif(a==8)
交换前\n"
exchang(T);
交换后\n"
elseif(a==9)
exit
(1);
elseprintf("
没有这个操作\n"
printf("
操作完成,请输入下一个操作\n"
choose(T);
intmain()//主函数
printf("
----------------二叉树的基本操作----------------\n"
请先建立二叉树,按先序的方式输入如果数据为空输入空格\n"
BiTreeT;
//定义二叉树,初始化
CreatBiTree(T);
choose(T);
四用户手册
根据程序的提示按先序输入二叉树,如果数据为空输入空格,然后回车,输入你要进行的操作的序号。
1.先序遍历、2中序遍历、3后序遍历、4层次遍历、5总节点数、6总叶子数、7树的深度、8交换左右子树、9结束操作
五实验总结
通过实验,我熟悉二叉树树的基本操作,掌握二叉树的实现以及实际应用。
加深了对二叉树的理解,逐步培养解决实际问题的编程能力以及进一步了解了二叉树。
递归的使用,要注意,初始时的状态以及如何使用递归,注意普遍性,思考时从普通的开始。
通过这次上机操作,让我明白书本上的程序一定要自己去调试,这样才能将书本程序与老师讲的内容融会贯通,达到温故而知新。
六运行结果
A
D
B
C
E
F
G
图
(1)
图表1