private void insertNoEmpty(KdNode tree, Point2D p, boolean vertical) {
   if (p.equals(tree.p)) return;
   double keyintree = vertical ? tree.p.y() : tree.p.x();
   double keytocmp = vertical ? p.y() : p.x();
   if (keytocmp < keyintree) {
     if (tree.l == null) {
       size++;
       tree.l = new KdNode(p);
     } else insertNoEmpty(tree.l, p, !vertical);
   } else {
     if (tree.r == null) {
       size++;
       tree.r = new KdNode(p);
     } else insertNoEmpty(tree.r, p, !vertical);
   }
 }