#pragma once
#ifndef CPreOrderBinaryTreeIterator_h
#define CPreOrderBinaryTreeIterator_h
#include "ABinaryTreeIterator.h"
namespace CoreFW
{
template< typename ClassType >
class DLL_TEMPLATE_DECLARATION_SPECIFIER CPreOrderBinaryTreeIterator : public ABinaryTreeIterator<ClassType>
{
public:
CPreOrderBinaryTreeIterator() ;
CPreOrderBinaryTreeIterator( CSortedBinaryTree<ClassType> &SortedBinaryTree ) ;
virtual ~CPreOrderBinaryTreeIterator() ;
bool Begin() ;
ABinaryTreeIterator<ClassType>& operator++() ; // Pre Increment Operator
ClassType* operator*() ;
bool IsEnd() ;
private:
void PushRightAndLeftChildNodes( CBinaryTreeNode<ClassType> *pSubTreeRootNode ) ;
} ;
} // End Namespace
#if defined( DLL_TEMPLATE_DECLARATION_SPECIFIER_EXPORT )
#include "CPreOrderBinaryTreeIterator.cpp"
#endif
#endif