code: private RedBlackTreeNode<Key, Value> put(RedBlackTreeNode<Key, Value> h, Key key, Value value) {
  	if (h == null)
  	    return new RedBlackTreeNode<>(key, value, RED, 1);
  
  	int cmp = key.compareTo(h.getKey());
  	if (cmp < 0)
  	    h.setLeft(put(h.getLeft(), key, value));
  	else if (cmp > 0)
  	    h.setRight(put(h.getRight(), key, value));
  	else
  	    h.setValue(value);
  
  	// fix-up any right-leaning links
  	if (isRed(h.getRight()) && !isRed(h.getLeft()))
  	    h = rotateLeft(h);
  	if (isRed(h.getLeft()) && isRed(h.getLeft().getLeft()))
  	    h = rotateRight(h);
  	if (isRed(h.getLeft()) && isRed(h.getRight()))
  	    flipColors(h);
  	h.setSize(size(h.getLeft()) + size(h.getRight()) + 1);
  
  	return h;
      }
docs: insert the key-value pair in the subtree rooted at h