Esempio n. 1
0
        private void DeleteWordHelper(
            MyTrieNode currentNode, MyTrieNode parentNode,
            string value, int currentIndex)
        {
            if (currentIndex == value.Length)
            {
                return;
            }

            parentNode  = currentNode;
            currentNode = currentNode.Children[
                value[currentIndex++]];

            DeleteWordHelper(currentNode, parentNode,
                             value, currentIndex);

            if (currentNode.Children.Count > 0)
            {
                currentNode.EndOfWord = false;
            }
            else
            {
                parentNode.Children.Remove(value[currentIndex - 1]);
            }
        }
Esempio n. 2
0
        public void DeleteWord(string value)
        {
            if (!ContainsWord(value))
            {
                return;
            }

            MyTrieNode currentNode = Root;
            MyTrieNode parentNode  = null;

            DeleteWordHelper(currentNode, parentNode, value, 0);
        }
Esempio n. 3
0
        public void Insert(string value)
        {
            if (value == null)
            {
                throw new ArgumentNullException();
            }
            var currentNode = Root;

            for (int i = 0; i < value.Length; i++)
            {
                if (currentNode.Children.ContainsKey(value[i]))
                {
                    currentNode = currentNode.Children[value[i]];
                }
                else
                {
                    var node = new MyTrieNode();
                    node.EndOfWord = i == value.Length - 1;
                    currentNode.Children[value[i]] = node;
                    currentNode = node;
                }
            }
        }
Esempio n. 4
0
 public MyTrie()
 {
     Root = new MyTrieNode();
 }