public class KdTree {
}

@@ -1,24 +1,1154 @@
-public class KdTree %7B
+import edu.princeton.cs.algs4.Point2D;%0A%0A%0Apublic class KdTree %7B%0A    private Node root;%0A    private int N;%0A%0A    private class Node %7B%0A        boolean x;%0A        Node left, right;%0A        Point2D point;%0A%0A        private Node(Point2D p, boolean x) %7B%0A            point = p;%0A            x = x;%0A        %7D%0A%0A        private int compare(Point2D p) %7B%0A            if      ((x && p.x() %3C point.x()) %7C%7C (!x && p.y() %3C point.y())) %7B return -1; %7D%0A            else if ((x && p.x() %3E point.x()) %7C%7C (!x && p.y() %3E point.y())) %7B return  1; %7D%0A            else                                                            %7B return  0; %7D%0A        %7D%0A    %7D%0A%0A    public int size()        %7B return N;      %7D%0A    public boolean isEmpty() %7B return (N==0); %7D%0A%0A    private Node insert(Node node, Point2D p, boolean x) %7B%0A        if (node==null) %7B return new Node(p, x); %7D%0A%0A        assert (node.x == x);%0A        int cmp = node.compare(p);%0A        if      (cmp %3C 0) %7B node.left = insert(node.left, p, !x);  %7D%0A        else if (cmp %3E 0) %7B node.right = insert(node.right, p, !x); %7D%0A%0A        return node;%0A    %7D%0A%0A    public void insert(Point2D p) %7B%0A        root = insert(root, p, true);%0A    %7D%0A%0A
 %0A%7D%0A

Implement insert