private QuadTreeNode insert(QuadTreeNode h, Point p) {
        if(h== null) return new QuadTreeNode(p);
        else if ( lessX(p,h) &&  lessY(p,h)) h.SW = insert(h.SW, p);
        else if ( lessX(p,h) && !lessY(p,h)) h.NW = insert(h.NW, p);
        else if (!lessX(p,h) &&  lessY(p,h)) h.SE = insert(h.SE, p);
        else if (!lessX(p,h) && !lessY(p,h)) h.NE = insert(h.NE, p);
        return h;
    }