private readonly WordCounter _word = new WordCounter(); // ссылки на все слова // метод добавления слова в trie public void InsertWord(String word) { var currentTrie = _root; foreach (var letter in word) { var inserted = false; foreach (TrieNode downTrie in currentTrie.DownLevel) { if (downTrie.Data.Equals(letter)) { downTrie.Base = currentTrie; currentTrie = downTrie; inserted = true; break; } } if (!inserted) { var down = new TrieNode(letter); currentTrie.DownLevel.Add(down); down.Base = currentTrie; currentTrie = down; } } currentTrie.Count++; // добавление слова в список if (!_word.Contains(currentTrie)) { _word.AddWord(currentTrie); } // добавление макс. слова в список if (currentTrie.Count > _wordCounter.WordCount) { _wordCounter.InsertWord(currentTrie); } else if (currentTrie.Count == _wordCounter.WordCount) { _wordCounter.AddWord(currentTrie); } }
// добавление к существующим public void AddWord(TrieNode node) { _lastLetter.Add(node); }
public bool Contains(TrieNode node) { return _lastLetter.Contains(node); }
// добавление с замещением всех предыдущих public void InsertWord(TrieNode node) { _lastLetter = new ArrayList { node }; WordCount = node.Count; }