#include<iostream>
using namespace std;
const int MaxSize=10;
class BiTree
{
public:
BiTree(char[],int n);
int GetLength();
void PrintAll();
void PrintPC();
void PrintL();
private:
char point[MaxSize];
int length;
};
BiTree::BiTree(char a[],int n)
{
if(n>MaxSize||n<0)throw"错误";
for(int i=0;i<n;i++)
{
point[i]=a[i];
}
length=n;
}
int BiTree::GetLength()
{
return length;
}
void BiTree::PrintAll()
{
for(int i=1;i<MaxSize;i++)
cout<<point[i]<<" ";
}
void BiTree::PrintPC()
{
int lc,rc,parent;
for(int i=1;i<=length;i++)
{
lc=2*i;
rc=2*i+1;
parent=i/2;
if(point[i-1]!='#')
{
if(parent>=1)
cout<<"结点"<<point[i-1]<<" 双亲为:"<<point[parent-1]<<" ";
else
cout<<"结点"<<point[i-1]<<" 无双亲"<<" ";
if(point[lc-1]!='#'&&lc<=length)
cout<<"\t左孩子为:"<<point[lc-1]<<" ";
else
cout<<" 无左孩子"<<" ";
if(point[rc-1]!='#'&&lc<=length)
cout<<" 右孩子为:"<<point[rc-1]<<" ";
else
cout<<"\t无右孩子";
cout<<endl;
}
}
}
void BiTree::PrintL()
{
int lc,rc;
cout<<"叶子结点为:"<<endl;
for(int i=1;i<length;i++)
{
if(point[i+1]!='#')
{
lc=2*i;
rc=2*i+1;
if(point[lc+1]=='#'&&point[rc]=='#')
cout<<point[i+1];
}
}
}
int main()
{
char a[MaxSize]={'A','B','C','#','D','#','#','#','#'};
BiTree bt(a,9);
cout<<"该树层序输出:"<<endl;
bt.PrintAll();
cout<<endl;
cout<<"结点的的双亲和孩子:"<<endl;
bt.PrintPC();
cout<<endl;
bt.PrintL();
cout<<endl;
return 0;
}
using namespace std;
const int MaxSize=10;
class BiTree
{
public:
BiTree(char[],int n);
int GetLength();
void PrintAll();
void PrintPC();
void PrintL();
private:
char point[MaxSize];
int length;
};
BiTree::BiTree(char a[],int n)
{
if(n>MaxSize||n<0)throw"错误";
for(int i=0;i<n;i++)
{
point[i]=a[i];
}
length=n;
}
int BiTree::GetLength()
{
return length;
}
void BiTree::PrintAll()
{
for(int i=1;i<MaxSize;i++)
cout<<point[i]<<" ";
}
void BiTree::PrintPC()
{
int lc,rc,parent;
for(int i=1;i<=length;i++)
{
lc=2*i;
rc=2*i+1;
parent=i/2;
if(point[i-1]!='#')
{
if(parent>=1)
cout<<"结点"<<point[i-1]<<" 双亲为:"<<point[parent-1]<<" ";
else
cout<<"结点"<<point[i-1]<<" 无双亲"<<" ";
if(point[lc-1]!='#'&&lc<=length)
cout<<"\t左孩子为:"<<point[lc-1]<<" ";
else
cout<<" 无左孩子"<<" ";
if(point[rc-1]!='#'&&lc<=length)
cout<<" 右孩子为:"<<point[rc-1]<<" ";
else
cout<<"\t无右孩子";
cout<<endl;
}
}
}
void BiTree::PrintL()
{
int lc,rc;
cout<<"叶子结点为:"<<endl;
for(int i=1;i<length;i++)
{
if(point[i+1]!='#')
{
lc=2*i;
rc=2*i+1;
if(point[lc+1]=='#'&&point[rc]=='#')
cout<<point[i+1];
}
}
}
int main()
{
char a[MaxSize]={'A','B','C','#','D','#','#','#','#'};
BiTree bt(a,9);
cout<<"该树层序输出:"<<endl;
bt.PrintAll();
cout<<endl;
cout<<"结点的的双亲和孩子:"<<endl;
bt.PrintPC();
cout<<endl;
bt.PrintL();
cout<<endl;
return 0;
}