BST class:
public:
Iterator rBegin() const
{
Iterator i;
i.rInit(root_);
return i;
}
Iterator rEnd() const
{
Iterator i;
return i;
}
|
Iterator class:
private:
void rInit(Node* n)
{
node_ = n;
while (node_ != nullptr && node_->HasRightChild())
node_ = node_->rchild_;
while (node_ != nullptr && node_->IsDead())
Decrement();
}
void Decrement ()
{
if (node_ == nullptr) return;
if (node_->IsLeftThreaded())
{
node_ = node_->lchild_;
return;
}
node_ = node_->lchild_;
while (node_ != nullptr && node_->HasRightChild())
node_ = node_->rchild_;
}
|