code: public final V remove(Object key) {
  	
  	if(key == null) return null;
  
  	int key_hash_code = key.hashCode();
  	BinTreeNode<K,V> prev = null;
  	int son = 0;
  	BinTreeNode<K,V> node = root;
  
  	while(node != null) {
  	    if(key_hash_code < node.keyHashCode) {
  		prev = node;
  		node = node.left;
  		son  = 0;
  	    }
  	    else {
  		if((key_hash_code > node.keyHashCode) || !node.key.equals(key)) {
  		    prev = node;
  		    node = node.right;
  		    son  = 1;
  		}
  		else {
  		    size--;
  		    cachedHashCode -= node.hashCode();
  		    return remove_node(node, prev, son);
  		}
  	    }
  	}
  	return null;
      }
docs: Removes the mapping previously attached to <code>key</code>.
  Returns the old mapping if any, or <code>null</code> otherwise.