/// <summary>Store the given value at the specified path.</summary>
        public virtual void AddPath(T value, params sbyte[][] parts)
        {
            int depth             = 0;
            ByteTrieNode <T> node = _root;

            foreach (sbyte[] part in parts)
            {
                foreach (sbyte b in part)
                {
                    ByteTrieNode <T> child = node._children.Get(b);
                    if (child == null)
                    {
                        child = new ByteTrieNode <T>();
                        node._children.Put(b, child);
                    }
                    node = child;
                    depth++;
                }
            }
            node.SetValue(value);
            _maxDepth = Math.Max(_maxDepth, depth);
        }
 /// <summary>
 /// Sets the default value to use in <see cref="ByteTrie{T}.Find(byte[])"/> when no path matches.
 /// </summary>
 public void SetDefaultValue(T defaultValue) => _root.SetValue(defaultValue);
 /// <summary>
 /// Sets the default value to use in
 /// <see cref="ByteTrie{T}.Find(sbyte[])"/>
 /// when no path matches.
 /// </summary>
 public virtual void SetDefaultValue(T defaultValue)
 {
     _root.SetValue(defaultValue);
 }