#include <iostream.h>

template <class type>
class bintree
{
	protected:
	bnode<type>* root;
	void destroy();

	public:
	friend bin_search_tree<type>;
	enum mode_type
	{
		preorder,postorder,inorder,beadthfirst
	};

	bintree(){root = 0;}
	int size();
	int height();
	bintree<type> operator=(const bintree<type> &old);
	void traverse(mode_type mode, void (*visit)(type item));
	~bintree();
};

template <class type>
struct bnode
{
	type item;
	bintree<type>* left;
	bintree<type>* right;
	bnode(){
				left=new bintree<type>;
				right=new bintree<type>;
			}
	~bnode(){
				delete left;
				delete right;
			}
};

