예제 #1
0
        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));
            }
        }