private void AddNode(string key, T data, ImplementedNode <T> node) { if (string.IsNullOrEmpty(key)) { if (!node.IsWord) { node.Data = data; node.IsWord = true; } } else { var symbol = key[0]; var subnode = node.TryFind(symbol); if (subnode != null) { AddNode(key.Substring(1), data, subnode); } else { var newNode = new ImplementedNode <T>(key[0], data, node.Prefix + key[0]); node.SubNodes.Add(key[0], newNode); AddNode(key.Substring(1), data, newNode); } } }
/// <summary> /// Удалить узел. /// </summary> /// <param name="key">Ключ.</param> /// <param name="node">Узел.</param> private void RemoveNode(string key, ImplementedNode <T> node) { if (string.IsNullOrEmpty(key)) { if (node.IsWord) { node.IsWord = false; } } else { var subnode = node.TryFind(key[0]); if (subnode != null) { RemoveNode(key.Substring(1), subnode); } } }
/// <summary> /// Поиск узла. /// </summary> /// <param name="key">Ключ.</param> /// <param name="node">Ухел.</param> /// <param name="value">Значение.</param> /// <returns></returns> private bool SearchNode(string key, ImplementedNode <T> node, out T value) { value = default(T); var result = false; if (string.IsNullOrEmpty(key)) { if (node.IsWord) { value = node.Data; result = true; } } else { var subnode = node.TryFind(key[0]); if (subnode != null) { result = SearchNode(key.Substring(1), subnode, out value); } } return(result); }