迭代器
template<class T,class Ref,class Ptr>
struct __TreeIterator
{
typedef BinTreeNode<T> Node;
typedef __TreeIterator<T,Ref,Ptr> Self;
__TreeIterator()
{}
__TreeIterator(Node* node)
:_node(node)
{}
Ref operator*()
{
assert(_node);
return _node->_date;
}
Self& operator++()
{
assert(_node);
if(_node->RightTag==Link)
{
Node* right=_node->rightchild;
while (right&&right->LeftTag==Link)
{
right=right->leftchild;
}
_node=right;
}
else
{
_node=_node->rightchild;
}
return *this;
}
Self& operator++(int)
{
Self tmp(*this);
++(*this);
return tmp;
}
Self& operator--()
{
assert(_node);
if(_node->LeftTag=Link)
{
Node* left=_node->leftchild;
while (left&&left->RightTag==Link)
{
left=left->rightchild;
}
_node=left;
}
else
{
_node=_node->leftchild;
}
return *this;
}
bool o