#include
using std::cin;
using std::cout;
using std::endl;
struct node
{
int data;
node *lchild;
node *rchild;
};
class binarytree
{
private:
node *head;//root of binarytree
protected:
void creat(node*&p);//creat tree
void destroy(node *p);
void _pretraverse(const node *p);
void _inordertraverse(const node*p);
void _posttraverse(const node*p);
public:
binarytree();
void pretraverse();
void inordertraverse();
void posttraverse();
~binarytree();
};
binarytree::binarytree()
{
creat(head);
}
void binarytree::destroy(node *p)
{
if(p)
{
destroy(p->lchild);
destroy(p->rchild);
delete p;
}
}
void binarytree::_pretraverse(const node *p)
{
if(p)
{
cout<data<<" ";
_pretraverse(p->lchild);
_pretraverse(p->rchild);
}
}
void binarytree::_inordertraverse(const node*p)
{
if(p)
{
_inordertraverse(p->lchild);
cout<data<<" ";
_inordertraverse(p->rchild);
}
}
void binarytree::_posttraverse(const node*p)
{
if(p)
{
_posttraverse(p->lchild);
_posttraverse(p->rchild);
cout<data<<" ";
}
}
void binarytree::creat(node *&p)
{
int n=0;
cin>>n;
if(!n)
{
p=NULL;
}
else
{
p=new node;
p->data=n;
creat(p->lchild);
creat(p->rchild);
}
}
void binarytree::pretraverse()
{
cout<<"preorder traversal:\n";
_pretraverse(head);
cout<<"\n";
}
void binarytree::inordertraverse()
{
cout<<"in order traversal:\n";
_inordertraverse(head);
cout<<"\n";
}
void binarytree::posttraverse()
{
cout<<"post order traversal:\n";
_posttraverse(head);
cout<<"\n";
}
binarytree::~binarytree()
{
destroy(head);
}
int main()
{
binarytree b1;
b1.pretraverse();
b1.inordertraverse();
b1.posttraverse();
return 0;
}
如有问题,可继续追问