/// <summary>
        /// Searches for the closest points in a hyper-sphere around the given center.
        /// </summary>
        /// <param name="center">The center of the hyper-sphere</param>
        /// <param name="radius">The radius of the hyper-sphere</param>
        /// <param name="neighboors">The number of neighbors to return.</param>
        /// <returns>The specified number of closest points in the hyper-sphere</returns>
        public Tuple <TDimension[], TNode>[] RadialSearch(TDimension[] center, double radius, int neighboors = -1)
        {
            var nearestNeighbors = new BoundedPriorityList <int, double>(this.Count);

            if (neighboors == -1)
            {
                this.SearchForNearestNeighbors(
                    0,
                    center,
                    HyperRect <TDimension> .Infinite(this.Dimensions, this.MaxValue, this.MinValue),
                    0,
                    nearestNeighbors,
                    radius);
            }
            else
            {
                this.SearchForNearestNeighbors(
                    0,
                    center,
                    HyperRect <TDimension> .Infinite(this.Dimensions, this.MaxValue, this.MinValue),
                    0,
                    nearestNeighbors,
                    radius);
            }

            return(nearestNeighbors.ToResultSet(this));
        }
        /// <summary>
        /// Finds the nearest neighbors in the <see cref="KDTree{TDimension,TNode}"/> of the given <paramref name="point"/>.
        /// </summary>
        /// <param name="point">The point whose neighbors we search for.</param>
        /// <param name="neighbors">The number of neighbors to look for.</param>
        /// <returns>The</returns>
        public Tuple <TDimension[], TNode>[] NearestNeighbors(TDimension[] point, int neighbors)
        {
            var nearestNeighborList = new BoundedPriorityList <int, double>(neighbors, true);
            var rect = HyperRect <TDimension> .Infinite(this.Dimensions, this.MaxValue, this.MinValue);

            this.SearchForNearestNeighbors(0, point, rect, 0, nearestNeighborList, double.MaxValue);

            return(nearestNeighborList.ToResultSet(this));
        }