//-----------------------------------------------------------------------------
#include "binarytreeclass.h"
//-----------------------------------------------------------------------------
template <class NodeType>
binarytree<NodeType>::binarytree(void) {

//----Nothing to do
}
//-----------------------------------------------------------------------------
template <class NodeType>
binarytree<NodeType>::~binarytree(void) {

//----Nothing to do
}
//-----------------------------------------------------------------------------
//----Preorder traversal
template <class NodeType>
void binarytree<NodeType>::PreorderTaverse(void) {

DoPreorderTaverse(Root);
cout << endl;

}
//-----------------------------------------------------------------------------
template <class NodeType>
void binarytree<NodeType>::DoPreorderTaverse(treenode<NodeType,2> *Node) {

if (Node != NULL) {
    cout << Node->GetData() << " ";
    DoPreorderTaverse(Node->GetOffspring(0));
    DoPreorderTaverse(Node->GetOffspring(1));
    }
}
//-----------------------------------------------------------------------------
//----Postorder traversal
template <class NodeType>
void binarytree<NodeType>::PostorderTaverse(void) {

DoPostorderTaverse(Root);
cout << endl;

}
//-----------------------------------------------------------------------------
template <class NodeType>
void binarytree<NodeType>::DoPostorderTaverse(treenode<NodeType,2> *Node) {

if (Node != NULL) {
    DoPostorderTaverse(Node->GetOffspring(0));
    DoPostorderTaverse(Node->GetOffspring(1));
    cout << Node->GetData() << " ";
    }
}
//-----------------------------------------------------------------------------
//----Inorder traversal
template <class NodeType>
void binarytree<NodeType>::InorderTaverse(void) {

DoInorderTaverse(Root);
cout << endl;

}
//-----------------------------------------------------------------------------
template <class NodeType>
void binarytree<NodeType>::DoInorderTaverse(treenode<NodeType,2> *Node) {

if (Node != NULL) {
    DoInorderTaverse(Node->GetOffspring(0));
    cout << Node->GetData() << " ";
    DoInorderTaverse(Node->GetOffspring(1));
    }
}
//-----------------------------------------------------------------------------
//----Public parts of binary tree iterator
//-----------------------------------------------------------------------------
//----Constructor
template <class NodeType>
binarytreeiterator<NodeType>::binarytreeiterator(
binarytree<NodeType> &TreeToIterate) : 
treeiterator<NodeType,2>(TreeToIterate) {

}
//-----------------------------------------------------------------------------
