// node.h
#ifndef NODE_H
#define NODE_H
template<class type>
class node
{
	public:
						node(type someitem,node<type> *l,node<type> *r);
		void 			append_left(type someitem);
		void 			append_right(type someitem);
		void			store(type someitem);
		type			data();
		node<type> 	*left_child();   // returns a pointer to a node
		node<type> 	*right_child();
		bool			is_leaf();
		void			delete_leaf();
		// The traverse functions have a parameter that is a function.
		// This function has one parameter of the type TYPE and returns
		// nothing. The syntax for each of these functions is:
		// return_type function_name(return_type (*function_name)(parameter_type))
		void			inorder_traverse(void (*visit) (type));
		void			preorder_traverse(void (*visit) (type));
		void			postorder_traverse(void (*visit) (type));

		node<type>	*lptr,*rptr;
		type			item;
};

#endif
