private IList <KDTreeNode <T> > getNodesInsideRegion(KDTreeNode <T> node, Hyperrectangle region, Hyperrectangle subRegion) { var result = new List <KDTreeNode <T> >(); if (node != null && region.IntersectsWith(subRegion)) { if (region.Contains(node.Position)) { result.Add(node); } result.AddRange(getNodesInsideRegion(node.Left, region, leftRect(subRegion, node))); result.AddRange(getNodesInsideRegion(node.Right, region, rightRect(subRegion, node))); } return(result); }