public Node rebalance() {
   final AxisSplitter s = new AxisSplitter(splitter.index, splitter.distribution.getMean());
   final Node l;
   if (null != left) {
     l = left.rebalance();
   } else if (count > 10) {
     l = new Node(new AxisSplitter((splitter.index + 1) % dimensions, 0));
   } else {
     l = null;
   }
   final Node r;
   if (null != right) {
     r = right.rebalance();
   } else if (count > 10) {
     r = new Node(new AxisSplitter((splitter.index + 1) % dimensions, 0));
   } else {
     r = null;
   }
   return new Node(s, l, r);
 }
 public void rebalance() {
   root = root.rebalance();
 }