| | | | | |

Engineering Details 3

    enum Flags
    {
      ZERO = 0x00 , DEAD = 0x01, RED = 0x02 , LEFT_THREAD = 0x04 , RIGHT_THREAD = 0x08 
    };

    struct Node
    {
      ...
      void Dump (std::ostream& os = std::cout) const
      {
        os << "  Node data:\n"
           << "    value:          " << value_  << '\n'
           << "    color:          " << (size_t)IsRed() << '\n'
           << "    alive:          " << (size_t)IsAlive() << '\n'
           << "    left_threaded:  " << (size_t)IsLeftThreaded() << '\n'
           << "    right_threaded: " << (size_t)IsRightThreaded() << '\n';
        os << "    lchild:         ";
        if (lchild_ != nullptr)
        {
          if (IsLeftThreaded())
            os << lchild_->value_  << " (predecessor)\n";
          else
            os << lchild_->value_  << " (left child)\n";
        }
        else
          os << "NULL\n";
        os << "    rchild:         ";
        if (rchild_ != nullptr)
        {
          if (IsRightThreaded())
            os << rchild_->value_  << " (succecessor)\n";
          else
            os << rchild_->value_  << " (right child)\n";
        }
        else
          os << "NULL\n";
        os << std::flush;
      }
    };  // struct BST_BASE<T,P>::Node

For obscure reasons, ANSI color codes offset characters slightly, so "blue is the new black" in our demos.


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