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;
 }