using System.Collections.Generic;
public static void Main()
Console.WriteLine("Hello World");
public char Value { get; set; }
public List<Node> Children { get; set; }
public Node Parent { get; set; }
public int Depth { get; set; }
public Node(char value, int depth, Node parent)
Children = new List<Node>();
return Children.Count == 0;
public Node FindChildNode(char c)
foreach (var child in Children)
public void DeleteChildNode(char c)
for (var i = 0; i < Children.Count; i++)
if (Children[i].Value == c)
private readonly Node _root;
_root = new Node('^', 0, null);
public Node Prefix(string s)
var result = currentNode;
currentNode = currentNode.FindChildNode(c);
public bool Search(string s)
return prefix.Depth == s.Length && prefix.FindChildNode('$') != null;
public void InsertRange(List<string> items)
for (int i = 0; i < items.Count; i++)
public void Insert(string s)
var commonPrefix = Prefix(s);
var current = commonPrefix;
for (var i = current.Depth; i < s.Length; i++)
var newNode = new Node(s[i], current.Depth + 1, current);
current.Children.Add(newNode);
current.Children.Add(new Node('$', current.Depth + 1, current));
public void Delete(string s)
var node = Prefix(s).FindChildNode('$');
var parent = node.Parent;
parent.DeleteChildNode(node.Value);