I'd suggest a QuadTree which stores regions like a MX-CIF tree. It's essentially a QuadTree based on 2 dimensions (x,y). Once you find an appropriate Node which contains the point in terms of (x,y), you can check to see if it contains the point in all three (x,y,z) dimensions.
I've done something similar in Java.
You can also look into Octree which is a 3-dimensional QuadTree.