| | | | | |

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_;
      }
    }
    ...
  }

| | Top of Page | 12. Binary Search Trees - 27 of 41