| | | | | |

Table::Node

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

    struct Node
    {
      K key_;
      D data_;
      Node * lchild_, * rchild_;
      unsigned char flags_;
      Node (const K& k, const D& d, Flags flags = DEFAULT)
      : key_(k), data_(d), lchild_(0), rchild_(0), flags_(flags)
      {}

      bool IsRed    () const { return 0 != (RED & flags_); }
      bool IsBlack  () const { return !IsRed(); }
      bool IsDead   () const { return 0 != (DEAD & flags_); }
      bool IsAlive  () const { return !IsDead(); }
      void SetRed   ()       { flags_ |= RED; }
      void SetBlack ()       { flags_ &= ~RED; }
      void SetDead  ()       { flags_ |= DEAD; data_ = D(); }
      void SetAlive ()       { flags_ &= ~DEAD; }
      // plus Is/Set/Unset for other flags 
  };


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