public void Remove(string key) { PrefixTreeNode <T> node = GetNode(key); if (node == null || node == _root) { return; } node.DeleteValue(); if (node.childs != null && node.childs.Count > 0) { return; } while (node.parent != _root && !node.hasValue) { if (node.childs != null && node.childs.Count > 0) { break; } node.parent.childs.Remove(node); node = node.parent; } }
public bool ContainsValue(string key) { PrefixTreeNode <T> node = GetNode(key); if (node == null) { return(false); } return(node.hasValue); }
public void AddChild(PrefixTreeNode <T> node) { if (childs == null) { childs = new List <PrefixTreeNode <T> >(); } if (!childs.Contains(node)) { childs.Add(node); } }
public T GetValue(string key) { if (!ContainsKey(key)) { throw new ArgumentException("Слово: '" + key + "' не существует в данном словаре. Воспользуйтесь командой '1', если хотите его добавить."); } PrefixTreeNode <T> node = GetNode(key); if (!node.hasValue) { throw new Exception("У слова '" + key + "' нет перевода в данном словаре, поищите в других словарях или добавьте сами"); } return(node.value); }
public void Add(string key, T value) { PrefixTreeNode <T> node = GetNode(key); if (node != null) { node.SetValue(value); return; } string additiveKey = ""; node = _root; for (int i = 0; i < key.Length; i++) { additiveKey += key[i]; node = Add(additiveKey, _root); } node.SetValue(value); }
public PrefixTreeNode <T> GetNode(string key, PrefixTreeNode <T> node) { if (node.key == key) { return(node); } if (node.childs == null || node.childs.Count == 0) { return(null); } for (int i = 0; i < node.childs.Count; i++) { if (key.StartsWith(node.childs[i].key)) { return(GetNode(key, node.childs[i])); } } return(null); }
private PrefixTreeNode <T> Add(string key, PrefixTreeNode <T> node) { if (node.key == key) { return(node); } if (node.childs == null || node.childs.Count == 0) { node.AddChild(new PrefixTreeNode <T>(node, key)); return(node.childs[0]); } for (int i = 0; i < node.childs.Count; i++) { if (key.StartsWith(node.childs[i].key)) { return(Add(key, node.childs[i])); } } node.AddChild(new PrefixTreeNode <T>(node, key)); return(node.childs[node.childs.Count - 1]); }
public PrefixTreeNode(PrefixTreeNode <T> parent, string key) { this.parent = parent; this.key = key; }