/**
* 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!).
*
*/
virtual 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();
}