Lazy Removal 2
size_t RSize(Node * n)
{
if (n == 0) return 0;
return (size_t)(n->IsAlive()) + RSize(n->lchild_) + RSize(n->rchild_);
// ^^^^^^^^^^^^^^^^^^^^^^ this is 0 or 1 if n is dead or alive
}
size_t RNumNodes(Node * n)
{
if (n == 0) return 0;
return 1 + RNumNodes(n->lchild_) + RNumNodes(n->rchild_);
// ^ this is always 1, dead or alive
}
T& Get ( const T& t )
{
...
Node * p = nullptr; // trailing parent
Node * n = root_;
bool left;
while (n != nullptr)
{
...
else // found
{
n->SetAlive();
return n->value_;
}
}
...
}