38 lines
1.1 KiB
C++
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 |