code: private final V remove_node(BinTreeNode<K,V> node, BinTreeNode<K,V> prev, int son) {
  	if(node.left == null)
  	    return remove_semi_leaf(node, prev, son, node.right);
  	if(node.right == null)
  	    return remove_semi_leaf(node, prev, son, node.left);
  
  	// The BinTreeNode to replace node in the tree. This is either the
  	// next or the precedent node (in the order of the hashCode's.
  	// We decide a bit randomly, to gain some balanceness.
  	BinTreeNode<K,V> m = 
  	    (node.keyHashCode % 2 == 0) ?
  	    extract_next(node) : extract_prev(node);
  
  	return finish_removal(node, prev, son, m);
      }
docs: right (son == 1) link. Returns the old value attached to node.