//brian jahns
//cs252 1999
//binary tree .h file

#ifndef Bintree_h
#define Bintree_h


template <class T>
struct Bnode{

Bnode(T, Bnode<T>*, Bnode<T>*);
T data;
Bnode<T>* lchild;
Bnode<T>* rchild;

};


template <class T>
class BinTree{

public:

BinTree();
BinTree(const BinTree&);
~BinTree();

bool IsEmpty();
void PreOrder() const;
void InOrder() const;
void PostOrder() const;

protected:

Bnode<T>* root;

void PreOrderHelper(Bnode<T>*) const;
void InOrderHelper(Bnode<T>*) const;
void PostOrderHelper(Bnode<T>*) const;

void DelTree(Bnode<T>*&);
void CopyTree(Bnode<T>*, Bnode<T>*&);

};


#endif