¡¡¡¡´úÂë2.³õʼ»¯BÊ÷
¡¡¡¡ÕâÊÇBTreeÀàµÄ¹¹Ô캯Êý£¬³õʼ»¯Ò»¸ö¸ù½Úµã¡£È«²¿´úÂëÎÒÉÔºó¸ø³ö¡£
¡¡¡¡ÏÂÃæÔòÒª¿¼ÂÇBÊ÷µÄ²åÈ룬ÆäʵBÊ÷µÄ¹¹½¨¹ý³ÌÒ²ÊÇÏòBÊ÷²åÈëÔªËصĹý³Ì¡£BÊ÷µÄ²åÈëÏà¶ÔÀ´Ëµ±È½Ï¸´ÔÓ£¬ÐèÒª¿¼ÂǺܶàÒòËØ¡£
¡¡¡¡Ê×ÏÈ£¬Ã¿Ò»¸ö½Úµã¿ÉÈÝÄɵÄÔªËظöÊýÊÇÒ»Ñù²¢ÇÒÓÐÏ޵ģ¬ÕâÀïÎÒÉùÃ÷ÁËÒ»¸ö³£Á¿×îΪÿ¸ö½Úµã£¬Èç´úÂë3Ëùʾ¡£
const int NumPerNode = 4; |
¡¡¡¡´úÂë3.ÉèÖÃÿ¸ö½Úµã×î¶àÈÝÄɵÄÔªËظöÊý
¡¡¡¡¶ÔÓÚBÊ÷À´Ëµ£¬½ÚµãÔö¼ÓµÄΨһ·½Ê½¾ÍÊǽڵã·ÖÁÑ£¬Õâ¸ö¸ÅÄîºÍSQL SERVERÖеÄÒ³·ÖÁÑÊÇÒ»ÑùµÄ¡£
¡¡¡¡Ò³·ÖÁѵĹý³ÌÊ×ÏÈÐèÒªÉú³ÉÐÂÒ³£¬È»ºó½«´ó¸ÅÒ»°ëµÄÔªËØÒƶ¯µ½ÐÂÒ³ÖУ¬È»ºó½«ÖмäÔªËØÌáÉýµ½¸¸½Úµã¡£±ÈÈçÎÒÏëÔÚÏÖÓеÄÔªËØÖвåÈë8£¬Ôì³ÉÒÑÂúµÄÒ³½øÐзÖÁÑ£¬Èçͼ3Ëùʾ£º
ͼ3.ÏòÒѾÂúµÄÒ¶×Ó½Úµã²åÈëÔªËØ»áÔì³ÉÒ³·ÖÁÑ
¡¡¡¡Í¨¹ýÒ¶×Ó·ÖÁѵĸÅÄî²»ÄÑ¿´³ö£¬Ò¶×Ó½Úµã·ÖÁѲŻáÔì³É·ÇÒ¶×Ó½ÚµãÔªËصÄÔö¼Ó¡£×îÖÕ´«µÝµ½¸ùÔªËØ¡£¶ø¸ùÔªËصķÖÁÑÊÇÊ÷³¤¸ßµÄΨһ;¾¶¡£
¡¡¡¡ÔÚC#ÖеÄʵÏÖ´úÂëÈç´úÂë4Ëùʾ¡£
-
- public void BTreeSplitNode(TreeNode<T> FatherNode, int position, TreeNode<T> NodeToBeSplit)
- {
- TreeNode<T> newNode = new TreeNode<T>();
- newNode.IsLeaf = NodeToBeSplit.IsLeaf;
- newNode.elementNum = NumPerNode - (NumPerNode / 2 + 1);
- for (int i = 1; i < NumPerNode - (NumPerNode / 2 + 1); i++)
- {
-
- newNode.Elements[i - 1] = NodeToBeSplit.Elements[i + NumPerNode / 2];
- }
- if (!NodeToBeSplit.IsLeaf)
- {
- for (int j = 1; j < NumPerNode / 2 + 1; j++)
- {
- newNode.Pointer[j - 1] = NodeToBeSplit.Pointer[NumPerNode / 2];
- }
- }
- NodeToBeSplit.elementNum = NumPerNode / 2;
-
-
- for (int k = FatherNode.elementNum + 1; k > position + 1; k--)
- {
- FatherNode.Pointer[k] = FatherNode.Pointer[k - 1];
- }
-
- for (int k = FatherNode.elementNum; k > position + 1; k--)
- {
- FatherNode.Elements[k] = FatherNode.Elements[k - 1];
- }
-
- FatherNode.Elements[position - 1] = NodeToBeSplit.Elements[NumPerNode / 2];
-
- FatherNode.elementNum += 1;
-
-
- }
|