code: function RBTree(lowKey, highKey, nilValue, comp) {
          this.highKey = highKey;
          this.comp = comp;
          /**
           * The number of keys inserted.
           */
          this.N = 0;
          this.lowNode = new RBNode(lowKey, nilValue);
          this.highNode = new RBNode(highKey, nilValue);
          // Notice that z does not have a key because it has to be less than and greater than every other key.
          var z = new RBNode(null, nilValue);
          this.head = new RBNode(lowKey, nilValue);
          // Head left is never used or changed so we'll store the tail node there.
          this.head.l = z;
          // Head right refers the the actual tree root which is currently empty.
          this.head.r = z;
          this.head.p = this.head;
      }
docs: Initializes an RBTree.
  It is important to define a key that is smaller than all expected keys
  so that the first insert becomes the root (head.r).
  
  @param lowKey A key that is smaller than all expected keys.
  @param highKey A key that is larger than all expected keys.
  @param nilValue The value to return when a search is not successful.
  @param comp The comparator used for comparing keys.