#include<iostream>
using namespace std;
#include<string>
struct node
{
string date;
node *lchild,*rchild,*parent;
};
class tree
{
public:
tree()
{
root=Creat(root);
}
~tree()
{
Release(root);
}
void PreOrder()
{
PreOrder(root);
cout<<endl;
}
void InOrder()
{
InOrder(root);
cout<<endl;
}
void PostOrder()
{
PostOrder(root);
cout<<endl;
}
void yezi()
{
yezi(root);
cout<<endl;
}
private:
node *root;
node *cyf;
string ch;
node * Creat(node *bt)
{
cout<<"请输入结点信息:";
cin>>ch;
if(ch=="#") bt=NULL;
else
{
cyf=bt;
bt=new node;
bt->parent=cyf;
bt->date=ch;
bt->lchild=Creat(bt);
bt->rchild=Creat(bt);
}
return bt;
}
void Release(node *bt)
{
if(bt!=NULL)
{
Release(bt->lchild);
Release(bt->rchild);
delete bt;
}
}
void PreOrder(node *bt)
{
if(bt==NULL)
return;
else
{
cout<<bt->date;
if(bt->parent!=NULL&&bt!=root)
cout<<" parent:"<<bt->parent->date;
else
cout<<" 该结点无双亲 ";
if(bt->lchild!=NULL)
cout<<" lchild:"<<bt->lchild->date;
else
cout<<" 该结点无左孩子 ";
if(bt->rchild!=NULL)
cout<<" rchild:"<<bt->rchild->date<<endl;
else
cout<<" 该结点无右孩子 "<<endl;
PreOrder(bt->lchild);
PreOrder(bt->rchild);
}
}
void InOrder(node *bt)
{
if(bt==NULL)
return;
else
{
InOrder(bt->lchild);
cout<<bt->date;
if(bt->parent!=NULL&&bt!=root)
cout<<" parent:"<<bt->parent->date;
else
cout<<" 该结点无双亲 ";
if(bt->lchild!=NULL)
cout<<" lchild:"<<bt->lchild->date;
else
cout<<" 该结点无左孩子 ";
if(bt->rchild!=NULL)
cout<<" rchild:"<<bt->rchild->date<<endl;
else
cout<<" 该结点无右孩子 "<<endl;
InOrder(bt->rchild);
}
}
void PostOrder(node *bt)
{
if(bt==NULL)
return;
else
{
PostOrder(bt->lchild);
PostOrder(bt->rchild);
cout<<bt->date;
if(bt->parent!=NULL&&bt!=root)
cout<<" parent:"<<bt->parent->date;
else
cout<<" 该结点无双亲 ";
if(bt->lchild!=NULL)
cout<<" lchild:"<<bt->lchild->date;
else
cout<<" 该结点无左孩子 ";
if(bt->rchild!=NULL)
cout<<" rchild:"<<bt->rchild->date<<endl;
else
cout<<" 该结点无右孩子 "<<endl;
}
}
void yezi(node *bt)
{
if(bt==NULL)
return;
else
{
if(bt->lchild==NULL&&bt->rchild==NULL)
{
cout<<bt->date;
if(bt->parent!=NULL&&bt!=root)
cout<<" parent:"<<bt->parent->date;
else
cout<<" 该结点无双亲 ";
if(bt->lchild!=NULL)
cout<<" lchild:"<<bt->lchild->date;
else
cout<<" 该结点无左孩子 ";
if(bt->rchild!=NULL)
cout<<" rchild:"<<bt->rchild->date<<endl;
else
cout<<" 该结点无右孩子 "<<endl;
}
yezi(bt->lchild);
yezi(bt->rchild);
}
}
};
int main()
{
tree a;
a.PreOrder();
a.InOrder();
a.PostOrder();
a.yezi();
return 0;
}