internal void Add(RectangleNode <TData> node)
 {
     if (_rootNode == null)
     {
         _rootNode = node;
     }
     else if (Count <= 2)
     {
         _rootNode = RectangleNode <TData> .CreateRectangleNodeOnEnumeration(_rootNode.GetAllLeafNodes().Concat(new[] { node }));
     }
     else
     {
         AddNodeToTreeRecursive(node, _rootNode);
     }
 }
        static void RebuildUnderNodeWithoutLeaf(RectangleNode <TData> nodeForRebuild, RectangleNode <TData> leaf)
        {
            Debug.Assert(leaf.IsLeaf);
            Debug.Assert(!nodeForRebuild.IsLeaf);
            var newNode =
                RectangleNode <TData> .CreateRectangleNodeOnEnumeration(
                    nodeForRebuild.GetAllLeafNodes().Where(n => !(n.Equals(leaf))));

            nodeForRebuild.Count     = newNode.Count;
            nodeForRebuild.Left      = newNode.Left;
            nodeForRebuild.Right     = newNode.Right;
            nodeForRebuild.Rectangle = new Rectangle(newNode.Left.rectangle, newNode.Right.rectangle);
        }