public bool IsWord(string word)
    {
        word = word.ToLower().Trim();
        TriesNode curr  = root;
        bool      found = false;

        foreach (char alpha in word.ToCharArray())
        {
            found = curr.Map.TryGetValue(alpha, out curr);
            if (!found)
            {
                return(false);
            }
        }
        return(found && curr != null && curr.IsWord);
    }
            /// <summary>
            /// Adds byte to container
            /// </summary>
            /// <param name="b">byte</param>
            /// <returns>Added node</returns>
            public TriesNode <TT> Add(byte b)
            {
                while (NodesCount >= Nodes.Length)
                {
                    var newNodes = new TriesNode <TT> [Nodes.Length + _initialCapacity];
                    for (int i = 0; i < Nodes.Length; i++)
                    {
                        newNodes[i] = Nodes[i];
                    }
                    Nodes = newNodes;
                }

                var ret = new TriesNode <TT>(b, _initialCapacity);

                Nodes[NodesCount++] = ret;
                return(ret);
            }
    public void AddWord(string word)
    {
        word = word.ToLower().Trim();
        TriesNode curr = root;
        TriesNode tempNode;

        foreach (char alpha in word.ToCharArray())
        {
            curr.Map.TryGetValue(alpha, out tempNode);
            if (tempNode == null)
            {
                tempNode = new TriesNode();
                curr.Map.Add(alpha, tempNode);
            }
            curr = tempNode;
        }
        curr.Value  = word;
        curr.IsWord = true;
    }
 /// <summary>
 /// Container constructor
 /// </summary>
 /// <param name="capacity">Nodes tabel intiial capacity</param>
 public TriesContainer(int capacity)
 {
     Nodes            = new TriesNode <TT> [capacity];
     _initialCapacity = capacity;
 }
 public Tries()
 {
     root = new TriesNode();
 }