/// <summary> /// Remove an item from the <see cref="QuadTree{T}"/>. /// </summary> /// <param name="item">Item to add.</param> /// <returns>True if successful, false if not.</returns> public virtual bool Remove(T item) { if (!itemDictionary.ContainsKey(item)) { return(false); } if (rootTree.Remove(item)) { itemDictionary.Remove(item); return(true); } return(false); }
/// <summary> /// Recursively removes an item. /// </summary> /// <param name="item">Item to be removed.</param> /// <returns>True if successful, false if not.</returns> public virtual bool Remove(T item) { if (!Boundary.ContainsPoint(item)) { return(false); } if (items.Remove(item)) { return(true); } if (northWest == null) { return(false); } bool removed = false; if (northWest.Remove(item)) { removed = true; } else if (northEast.Remove(item)) { removed = true; } else if (southWest.Remove(item)) { removed = true; } else if (southEast.Remove(item)) { removed = true; } // If a change was made, check if child trees are empty, if so then remove them. if (removed) { clean(); return(true); } return(false); }