#include<iostream>
#include<string>
using namespace std;
#define MaxSize 20
class Tree
{
private:
int lenght;
char *tree;
public:
Tree(char *a);
~Tree(){};
void LeverOrder();
void PrintKids();
void PrintParents();
void PrintLeft();
};
Tree::Tree(char *a)
{
lenght=strlen(a);
tree=a;
}
void Tree::LeverOrder()
{
for(int i=1;i<lenght;i++)
{
if(tree[i]!='^')
cout<<tree[i]<<' ';
if(tree[i]=='/0')
break;
}
cout<<endl;
}
void Tree::PrintKids()
{
for(int i=0;i<lenght;i++)
{
int j=i+1;
if(tree[2*j-1]!='^'&&2*j-1<lenght&&tree[i]!=0)
cout<<tree[i]<<"的左孩子为"<<tree[2*j-1]<<endl;
else
cout<<tree[i]<<"无左孩子"<<endl;
if(tree[2*j]!='^'&&2*j-1<lenght&&tree[i]!=0)
cout<<tree[i]<<"的右孩子为"<<tree[2*j]<<endl;
else
cout<<tree[i]<<"无右孩子"<<endl;
}
}
void Tree::PrintParents()
{
for(int i=0;i<lenght;i++)
{
int j=i+1;
if(i==0)
cout<<tree[i]<<"为根结点"<<endl;
if(i>0&&tree[j/2-1]!='^'&&tree[i]!='^')
cout<<tree[i]<<"的双亲结点为:"<<tree[j/2-1]<<endl;
}
}
void Tree::PrintLeft()
{
cout<<"叶子结点为:"<<endl;
for(int i=0;i<lenght;i++)
{
if(2*i+1>lenght&&tree[i]!='^')
cout<<tree[i]<<' ';
}
cout<<endl;
}
int main()
{
char a[16]="ABC^DE^^^FG^H";
Tree tree(a);
tree.LeverOrder();
tree.PrintParents();
tree.PrintKids();
tree.PrintLeft();
return 0;
}