public TreeDictionary <TKey, TValue, TComparer> Remove(TKey key, out Optional <TValue> value) { if (Count == 0) { value = Optional <TValue> .None; return(this); } int comparison = _Comparer.Compare(key, _key); if (comparison == 0) { value = _value; return(GlueBalanced(_left, _right)); } if (comparison < 0) { var newLeft = _left.Remove(key, out value); return(value.HasValue ? NearlyBalanced(newLeft, _right) : Balanced(newLeft, _right)); } else { var newRight = _right.Remove(key, out value); return(value.HasValue ? NearlyBalanced(_left, newRight) : Balanced(_left, newRight)); } }