一、实验目的 1、 熟练理解树和二叉树的相关概念,掌握的存储结构和相关操作实现; 2、 掌握树的顺序结构的实现; 3、 学会运用树的知识解决实际问题
二、 实验内容 自己确定一个二叉树(树结点类型、数目和结构自定)利用顺序结构方法存储。实 现树的构造,并完成: 1) 层序输出结点数据; 2) 以合理的格式,输出各个结点和双亲、孩子结点信息; 3) 输出所有的叶子结点信息; 4)分析你的算法对于给定的二叉树的存储效率。
三、实验步骤 1、依据实验内容,先确定具体的二叉树,并说明结点的数据据类型; 2、设计具体的算法; 3、写出完整程序; 4、总结、运行结果和分析算法效率。 5、总体收获和不足,疑问等。 四、实验要求 1、 按照数据结构实验任务书,提前做好实验预#include<iostream.h>
const int MaxSize=20;
class tree
{
public:
tree(char a[],int n);//构造输入结点信息
void printall();//层序输出数据
void printpc();//输出结点双亲孩子
void printle();//输出叶子
private:
char point[MaxSize];
int length;
};
tree::tree(char a[],int n)
{
if(n>MaxSize||n<=0)throw"错误";
for(int i=0;i<n;i++)
{point[i]=a[i];}
length=n;
}
void tree::printall()
{
for(int i=0;i<length;i++)
{
if(point[i]!='#')
{cout<<point[i];}
}
}
void tree::printpc()
{
int c1,c2,b;
for(int i=1;i<=length;i++)
{
c1=2*i;
c2=2*i+1;
b=i/2;
if(point[i-1]!='#')
{
if(b>=1)
cout<<"结点"<<point[i-1]<<"\t双亲为:"<<point[b-1]<<" ";
else
cout<<"结点"<<point[i-1]<<"\t无双亲"<<" ";
if(point[c1-1]!='#'&&c1<=length)
cout<<"\t左孩子为:"<<point[c1-1]<<" ";
else
cout<<"\t无左孩子"<<" ";
if(point[c2-1]!='#'&&c2<=length)
cout<<"\t右孩子为:"<<point[c2-1]<<" ";
else
cout<<"\t无右孩子";
cout<<endl;
}
}
}
void tree::printle()
{
int c1,c2;
for(int i=1;i<=length;i++)
{
c1=2*i;
c2=2*i+1;
if(point[c1-1]=='#'&&point[c2-1]=='#'&&point[i-1]!='#')
cout<<point[i-1];
if(c1>length&&point[i-1]!='#')
cout<<point[i-1];
}
}
int main()
{
char a[MaxSize]={'A','B','C','D','#','E','F','#','G','#','#','H'};
tree t(a,12);
cout<<"该树层序输出:"<<endl;
t.printall();
cout<<endl;
cout<<"结点的的双亲和孩子:"<<endl;
t.printpc();
cout<<endl;
cout<<"该树叶子结点:"<<endl;
t.printle();
cout<<endl;
return 0;
}