| | | | | |

Engineering Details 1

Add one byte to node for various flags: red/black, alive/dead plus room for 6 more

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

    struct Node
    {
      T             value_;
      Node *        lchild_,
           *        rchild_;
      uint8_t       flags_;

      Node (const T& tval, uint8_t flags) : value_(tval), lchild_(nullptr), rchild_(nullptr), flags_(flags)
      {}

      static const char* ColorMap (uint8_t flags)
      {
        flags &= 0x03; // last 2 bits only
        switch(flags)
        {
          case 0x00: return ANSI_BOLD_BLUE;        // bits 00 = !RED |  ALIVE 
          case 0x01: return ANSI_BOLD_BLUE_SHADED; // bits 01 = !RED | !ALIVE
          case 0x02: return ANSI_BOLD_RED;         // bits 10 =  RED |  ALIVE
          case 0x03: return ANSI_BOLD_RED_SHADED;  // bits 11 =  RED | !ALIVE
          default: return "unknown color";   // unknown flags
        }
      }

      // support for Erase
      ...
      // support for color management
      ...
      // support for search
      ...
      // support for threaded iterators    
      ...
      // node dump - may be used during development
      ...
    };  // struct BST_BASE<T,P>::Node


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