Files
Work/bsptree/ITERATEI.TPP
2024-08-07 09:12:07 -04:00

38 lines
1.1 KiB
C++

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