AVL .
InsertIntoNew():
public ImmutableDictionary<K,V> InsertIntoNew(K key, V val)
{ ... }
RemoveFromNew():
/** Try to remove the key, and return the resulting Dict
* if the key is not found, old_node is Empty, else old_node is the Dict
* with matching Key
*/
public ImmutableDictionary<K,V> RemoveFromNew(K key, out ImmutableDictionary<K,V> old_node)
{ ... }
, : AVL #. (log N).