protected void remove( TrieSequencer<S> sequencer )
   {
      // Decrement size if this node had a value
      setValue( null );

      int childCount = (children == null ? 0 : children.size());

      // When there are no children, remove this node from it's parent.
      if (childCount == 0)
      {
         parent.children.remove( sequencer.hashOf( sequence, start ) );
      }
      // With one child, become the child!
      else if (childCount == 1)
      {
         TrieNode<S, T> child = children.valueAt( 0 );

         children = child.children;
         value = child.value;
         sequence = child.sequence;
         end = child.end;

         child.children = null;
         child.parent = null;
         child.sequence = null;
         child.value = null;

         registerAsParent();
      }
   }