/// <summary> /// Remove the value that a key leads to and any redundant nodes which result from this action /// </summary> /// <param name="key">Key of the value to remove</param> public void Remove(TKey key) { ITrieNode <TKeyBit, TValue> node = this._root; IEnumerable <TKeyBit> bs = this._keyMapper(key); foreach (TKeyBit b in bs) { //Bail out early if the key doesn't go anywhere if (!node.TryGetChild(b, out node)) { return; } } node.Value = null; //Remove all ancestor nodes which don't lead to a value. while (!node.IsRoot && !node.HasValue && node.Count == 0) { TKeyBit prevKey = node.KeyBit; node = node.Parent; node.RemoveChild(prevKey); } }