#include<iostream.h>
#include<math.h>
const int size=15;
struct t
{
char *lson,*rson;
char* parent;
char* name;
};
class tree
{private:
t s[size];
public:
tree(char* n[],int m);
~tree(){};
void layerprint();
void familyprint();
void leafprint();};
tree::tree(char* n[],int m)
{ int i,e,x;
int q; //q为层数
q=log(m)/log(2)+1;
for( i=0;i<size;i++)
s[i].name=NULL;
for( i=0;i<m;i++)
s[i].name=n[i];
x=1;
for(i=0;i<q-1;i++)
x=x*2; //x为第q层第一个数
for(i=1;i<(x*2-1);i++)
s[i].parent=s[(i-1)/2].name;
for(i=0;i<(x-1);i++)
{
s[i].lson=s[2*i+1].name;
s[i].rson=s[2*i+2].name;}
s[0].parent=NULL;
e=x;
x=x-1;
for(x;x<(e*2-1);x++)
{s[x].lson=NULL;
s[x].rson=NULL;}}
void tree::layerprint()
{ int x,e,b,a,i;
double q; //q为层数
q=log(size+1)/log(2);
for(i=1;i<q+1;i++)
{cout<<" ";
for(b=0;b<q+1-i;b++)
cout<<" ";
x=1;
for(a=1;a<i;a++)
x=x*2;
e=x;
for(x=x-1;x<(e*2-1);x++)
if(s[x].name!=NULL)
cout<<s[x].name<<" ";
cout<<endl;
} }
void tree::familyprint()
{int i;
for(i=0;i<size;i++)
{if(s[i].name!=NULL)
{cout<<"第"<<i+1<<"的结点数据为:"<<s[i].name<<endl;
if(s[i].parent!=NULL)
cout<<"其父母的数据为:"<<s[i].parent<<endl;
if(s[i].lson!=NULL)
cout<<"其左孩子的数据为:"<<s[i].lson<<endl;
if(s[i].rson!=NULL)
cout<<"其右孩子的数据为:"<<s[i].rson<<endl;}}}
void tree::leafprint()
{int i;
cout<<"叶子结点的数据为:";
for(i=0;i<size;i++)
if(s[i].name!=NULL)
if(s[i].lson==NULL||s[i].rson==NULL)
cout<<s[i].name<<" ";
cout<<endl;}
int main()
{
char *n[5]={"哇","哈","呵","嘿","啦"};
tree T(n,5);
T.layerprint();
T.familyprint();
T.leafprint();
return 0;}
#include<math.h>
const int size=15;
struct t
{
char *lson,*rson;
char* parent;
char* name;
};
class tree
{private:
t s[size];
public:
tree(char* n[],int m);
~tree(){};
void layerprint();
void familyprint();
void leafprint();};
tree::tree(char* n[],int m)
{ int i,e,x;
int q; //q为层数
q=log(m)/log(2)+1;
for( i=0;i<size;i++)
s[i].name=NULL;
for( i=0;i<m;i++)
s[i].name=n[i];
x=1;
for(i=0;i<q-1;i++)
x=x*2; //x为第q层第一个数
for(i=1;i<(x*2-1);i++)
s[i].parent=s[(i-1)/2].name;
for(i=0;i<(x-1);i++)
{
s[i].lson=s[2*i+1].name;
s[i].rson=s[2*i+2].name;}
s[0].parent=NULL;
e=x;
x=x-1;
for(x;x<(e*2-1);x++)
{s[x].lson=NULL;
s[x].rson=NULL;}}
void tree::layerprint()
{ int x,e,b,a,i;
double q; //q为层数
q=log(size+1)/log(2);
for(i=1;i<q+1;i++)
{cout<<" ";
for(b=0;b<q+1-i;b++)
cout<<" ";
x=1;
for(a=1;a<i;a++)
x=x*2;
e=x;
for(x=x-1;x<(e*2-1);x++)
if(s[x].name!=NULL)
cout<<s[x].name<<" ";
cout<<endl;
} }
void tree::familyprint()
{int i;
for(i=0;i<size;i++)
{if(s[i].name!=NULL)
{cout<<"第"<<i+1<<"的结点数据为:"<<s[i].name<<endl;
if(s[i].parent!=NULL)
cout<<"其父母的数据为:"<<s[i].parent<<endl;
if(s[i].lson!=NULL)
cout<<"其左孩子的数据为:"<<s[i].lson<<endl;
if(s[i].rson!=NULL)
cout<<"其右孩子的数据为:"<<s[i].rson<<endl;}}}
void tree::leafprint()
{int i;
cout<<"叶子结点的数据为:";
for(i=0;i<size;i++)
if(s[i].name!=NULL)
if(s[i].lson==NULL||s[i].rson==NULL)
cout<<s[i].name<<" ";
cout<<endl;}
int main()
{
char *n[5]={"哇","哈","呵","嘿","啦"};
tree T(n,5);
T.layerprint();
T.familyprint();
T.leafprint();
return 0;}