| | | | | |

Threaded Iterator Support (Reverse)

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

| | Top of Page | 14. BST Iterators - 34 of 41