数据结构实验四

#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;

}