示例#1
0
        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;
            }
        }
示例#2
0
        public bool ContainsValue(string key)
        {
            PrefixTreeNode <T> node = GetNode(key);

            if (node == null)
            {
                return(false);
            }

            return(node.hasValue);
        }
示例#3
0
        public void AddChild(PrefixTreeNode <T> node)
        {
            if (childs == null)
            {
                childs = new List <PrefixTreeNode <T> >();
            }

            if (!childs.Contains(node))
            {
                childs.Add(node);
            }
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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]);
        }
示例#8
0
 public PrefixTreeNode(PrefixTreeNode <T> parent, string key)
 {
     this.parent = parent;
     this.key    = key;
 }