数据结构树和森林实验报告Word格式文档下载.docx
《数据结构树和森林实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构树和森林实验报告Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
第二题:
2>
求森林的高度。
full41.cbt
letter.cbt
遍历每一棵树,寻找高度的最大值。
可以设立一个私有成员来记录数的高度。
第三题:
3>
按层次方式遍历森林。
先访问第一层结点,并将它放入队列中,并反复从队列中取结点,访问其孩子结点,直至访问到叶子结点。
第四题:
4>
输出一个森林中每个结点的值及其对应的层次数。
使用递归函数来访问森林,同时输出层次数及结点值,使用形参来传递当前层次数
第五题:
5>
输出一个森林的广义表形式,如下图中的森林的输出为:
(a(b(c,d,e,f),g(h,i,j),k(l,m,n)),o(p(q)),r(s(t(u)),v(w(x,y,z))))
使用递归函数调用,若当前节点有左孩子,则先输出‘(’再访问下一节点,若当前节点的右指针不为空,则先输出‘,’再访问下一结点。
实验测试数据
实验程序
#include<
iostream>
usingnamespacestd;
typedefcharElemType;
#defineMAX200
typedefstructCSNode
{
ElemTypedata;
structCSNode*firstchild,*nejtsibling;
}
CSNode,*CSTree;
typedefstructBTNode
structBTNode*lchild,*rchild;
}BTNode,*BTree;
classFOREST
public:
FOREST();
CSTreereturnT();
//输出森林的根结点
BTreereturnBT();
//输出森林的根结点
CSTreecreat(CSTree&
T);
//创建森林
BTreechange(CSTree&
T,BTree&
BT1);
//将森林转换成为二叉树
voidfirst(CSTree&
T,inti);
//第一题:
按照先序遍历的方式来输出树林每个结点的值以及层次
voidsecond(CSTree&
//第五题:
输出一个森林的广义表形式
voidthird(constCSTree&
//第三题:
voidfourth(BTree&
BT);
//第四题:
按照先序遍历的方式来输出二叉树每个结点的值
inthigth(constCSTree&
//第二题:
求森林的高度
private:
CSTreeT;
//森林的头结点
BTreeBT;
//二叉树的头结点
inthigh;
//森林的高度
};
FOREST:
:
FOREST()
high=0;
T=NULL;
BT=NULL;
CSTreeFOREST:
returnT()
returnT;
BTreeFOREST:
returnBT()
returnBT;
creat(CSTree&
T)
inta,b;
T=newCSNode;
cin>
>
T->
data>
a>
b;
if(a==1)T->
firstchild=NULL;
elsecreat(T->
firstchild);
if(b==1)T->
nejtsibling=NULL;
nejtsibling);
}
change(CSTree&
BT)
{
if(!
T){BT=NULL;
returnNULL;
}
BT=newBTNode;
BT->
data=T->
data;
firstchild)BT->
lchild=NULL;
elsechange(T->
firstchild,BT->
lchild);
nejtsibling)BT->
rchild=NULL;
nejtsibling,BT->
rchild);
voidFOREST:
first(CSTree&
T,inti)
T)return;
cout<
data<
"
"
i<
endl;
if(T->
firstchild)first(T->
firstchild,i+1);
nejtsibling)first(T->
nejtsibling,i);
second(CSTree&
data;
firstchild){
'
('
;
second(T->
}
nejtsibling){
'
elsecout<
)'
third(constCSTree&
CSTreeS[MAX];
CSTreep;
intj=1,i=1;
p=T;
while(p){
S[i++]=p;
p=p->
nejtsibling;
while(i!
=j)
{
CSTreeq;
q=S[j++];
q->
data<
q=q->
firstchild;
while(q){
S[i++]=q;
nejtsibling;
fourth(BTree&
BT)return;
BT->
if(BT->
lchild)fourth(BT->
rchild)fourth(BT->
intFOREST:
higth(constCSTree&
inths,hb;
return0;
hs=higth(T->
firstchild);
hb=higth(T->
high=(hs+1)>
hb?
(hs+1):
hb;
returnhigh;
intmain(){
FORESTf_1,f_2,f_3,f_4,f_5;
intchioce;
cout<
数据结构实验五--树和森林应用实验"
第1题:
将一棵树(或森林)转换为二叉树"
第2题:
求森林的高度"
第3题:
按层次方式遍历森林"
第4题:
输出一个森林中每个结点的值及其对应的层次数"
第5题:
输出一个森林的广义表形式"
退出程序:
0"
请选择一道题"
cin>
chioce;
switch(chioce)
{
case1:
{
cout<
请输入森林的元素"
CSTreep1;
BTreep;
p1=f_1.returnT();
p=f_1.returnBT();
p1=f_1.creat(p1);
p=f_1.change(p1,p);
按照二叉树先序遍历的结果是:
f_1.fourth(p);
break;
}
case2:
CSTreep2;
p2=f_2.returnT();
p2=f_2.creat(p2);
森林的高度是:
f_2.higth(p2);
case3:
CSTreep3;
p3=f_3.returnT();
p3=f_3.creat(p3);
按照层次遍历的结果是:
f_3.third(p3);
case4:
{
CSTreep4;
p4=f_3.returnT();
p4=f_3.creat(p4);
按照森林先序遍历输出的结果是输出"
一个森林中每个结点的值及其对应的层次数:
f_3.first(p4,1);
case5:
CSTreep5;
p5=f_3.returnT();
p5=f_3.creat(p5);
输出一个森林的广义表形式:
f_3.second(p5);
case0:
cout<
EXIT"
break;
default:
输入错误,请重新输入"
}
return0;