#ifndef _BSPTREE_TREEITERATORINORDER_HPP_ #error ITERATE.HPP must precede ITERATEI.TPP #endif #ifndef _BSPTREE_TREEITERATORINORDER_TPP_ #define _BSPTREE_TREEITERATORINORDER_TPP_ template T *TreeIteratorInorder::operator++(void) { if(!mInorderStack.size())return 0; SmartPointer > currTreeNode; mInorderStack.pop(currTreeNode); if(!currTreeNode->rightNode())return &currTreeNode->item(); for(TreeNode *pTreeNode=currTreeNode->rightNode();pTreeNode;pTreeNode=pTreeNode->leftNode()) mInorderStack.push(SmartPointer >(pTreeNode)); return &currTreeNode->item(); } template TreeIteratorInorder &TreeIteratorInorder::operator=(BinaryTree &binaryTree) { createInorderStack(binaryTree); return *this; } template void TreeIteratorInorder::createInorderStack(BinaryTree &binaryTree) { mInorderStack.clear(); TreeNode *pTreeNode=binaryTree.rootNode(); while(pTreeNode) { mInorderStack.push(SmartPointer >(pTreeNode)); pTreeNode=pTreeNode->leftNode(); } } #endif