k-d Tree Nearest Neighbor Search
NNS(q: point, n: node, p: ref point w: ref distance)
if n.left = n.right = null then {leaf case}
if q(n.axis) < n.value then {query to left}
if q(n.axis) + w > n.value then NNS(q, n.right, p, w);
if q(n.axis) - w < n.value then NNS(q, n.left, p, w)