sclass PtTree { Node root = new Leaf; abstract class Node { Node parent; abstract bool add(Pt p); abstract void collectPointsIn(Rect r, L out); } class Leaf extends Node { Cl points; } class Split extends Node { int splitPoint; Node a, b; } class SplitH extends Split {} class SplitV extends Split {} int maxPointsPerNode = 4; bool add(Pt p) { ret root.add(p); } L pointsIn(Rect r) { new L out; root.collectPointsIn(r, out); ret out; } }