#ifndef PREORDERTREETRAVERSAL_H
#define PREORDERTREETRAVERSAL_H


#include "node.h"

template <class T>
class preorderTreeTraversal
{
public:
	preorderTreeTraversal(node<T>* root) : current(root) {}

	preorderTreeTraversal<T>& operator++(int);

	friend bool operator!=(preorderTreeTraversal<T>& lhs,
			    		   preorderTreeTraversal<T>& rhs);



protected:

	node<T>* current;
};


// stub function implementation.  Always turns this object into an "end of tree" preorderiterator
template <class T>
preorderTreeTraversal<T>& 
preorderTreeTraversal<T>::operator ++(int)
{
	current = NULL;
	return *(this);
}



template <class T> 
bool operator!=(preorderTreeTraversal<T>& lhs, preorderTreeTraversal<T>& rhs)
{
	return lhs.current != rhs.current;
}


#endif