code: public void trimToSize() {
          // first balance the tree for best performance
          balance();
  
          // redimension the node arrays
          redimNodeArrays(freenode);
  
          // ok, compact kv array
          CharVector kx = new CharVector();
          kx.alloc(1);
          TernaryTree map = new TernaryTree();
          compact(kx, map, root);
          kv = kx;
          kv.trimToSize();
      }
docs: Each node stores a character (splitchar) which is part of
  some key(s). In a compressed branch (one that only contain
  a single string key) the trailer of the key which is not
  already in nodes is stored  externally in the kv array.
  As items are inserted, key substrings decrease.
  Some substrings may completely  disappear when the whole
  branch is totally decompressed.
  The tree is traversed to find the key substrings actually
  used. In addition, duplicate substrings are removed using
  a map (implemented with a TernaryTree!).