#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;
}
实验四 树和二叉树实验1
猜你喜欢
转载自blog.csdn.net/nika_jy_L/article/details/80721786
今日推荐
周排行