I'm looking for a data structure to perform nearest-neighbor searches in 3D Euclidean space. I have used kd- and balltrees for this purpose before, but my problem is more sophisticated this time. I'd like to be able to insert and delete points from my dataset dynamically. I don't see any reason why either of these two data structures wouldn't support this. Based on my understanding of both algorithms, I would think they offer the same complexities for each operation as a 1D binary search tree, including logarithmic-time insertion and deletion. Yet I can't find an implementation of either type of tree that supports these operations.
Why do none of the kdtree and balltree implementations I can find online (in particular from sklearn and alglib) support insertion/deletion? Is there a different freely available implementation which does?