private void SplitRecursive( TKey key, out TreeDictionary <TKey, TValue, TComparer> less, out Optional <TValue> value, out TreeDictionary <TKey, TValue, TComparer> greater) { if (Count == 0) { less = Empty; value = Optional <TValue> .None; greater = Empty; return; } int comparison = _Comparer.Compare(key, _key); if (comparison == 0) { less = _left; value = Optional.Some(_value); greater = _right; return; } if (comparison < 0) { _left.SplitRecursive(key, out less, out value, out greater); greater = Unbalanced(_key, _value, greater, _right); return; } else { _right.SplitRecursive(key, out less, out value, out greater); less = Unbalanced(_key, _value, _left, less); return; } }