@@ -192,29 +192,35 @@ struct node* insertN(int value,struct node *root,struct node *parent){
192
192
}
193
193
194
194
for (i = right ; i < treeOrder ; i ++ ){ // Move all right half data to new LeftHalf Box
195
- rightHalf = insertN (root -> value [i ],rightHalf ,NULL ); // pointer arithmethic
195
+ rightHalf = insertN (root -> value [i ],rightHalf ,NULL );
196
196
}
197
197
198
+ int pIsNull = parent == NULL ? 1 : 0 ;
198
199
struct node * tempRoot = root ;
199
- root = insertN ( root -> value [ mid ], parent , parent ) ;
200
+ struct node * pParent = pIsNull ? NULL : parent -> parent ;
200
201
201
- if (parent == NULL ){ // Special case if splitted is the tRoot (The very Root)
202
- leftHalf -> parent = root ;
203
- rightHalf -> parent = root ;
204
- root -> keys [0 ] = leftHalf ;
205
- root -> keys [1 ] = rightHalf ;
202
+ parent = insertN (root -> value [mid ],parent ,pParent );
203
+
204
+ if (pIsNull ){ // Special case if splitted is the tRoot (The very Root)
205
+ leftHalf -> parent = parent ;
206
+ rightHalf -> parent = parent ;
207
+ parent -> keys [0 ] = leftHalf ;
208
+ parent -> keys [1 ] = rightHalf ;
209
+
210
+ free (tempRoot ); // Delete old root node box
211
+ return parent ;
206
212
} else {
207
- for (i = 0 ; i < tempRoot -> parent -> keyCount ; i ++ ){
208
- if (tempRoot -> parent -> keys [i ] == tempRoot ){
209
- tempRoot -> parent -> keys [i ] = leftHalf ;
210
- tempRoot -> parent -> keys [i + 1 ] = rightHalf ;
213
+ for (i = 0 ; i < parent -> keyCount ; i ++ ){
214
+ if (parent -> keys [i ] == tempRoot ){
215
+ parent -> keys [i ] = leftHalf ;
216
+ parent -> keys [i + 1 ] = rightHalf ;
211
217
}
212
218
}
219
+ free (tempRoot );
220
+ return leftHalf ;
213
221
}
214
222
215
223
// To do : Non special case split and distribute... or if parent has a parent with values
216
-
217
- free (tempRoot ); // Delete old root node box
218
224
}
219
225
}
220
226
@@ -226,7 +232,7 @@ void inOrder(struct node *root){
226
232
int i ;
227
233
if (root == NULL ) return ;
228
234
else {
229
- //root = root->keys[1 ];
235
+ // root = root->keys[2 ];
230
236
for (i = 0 ; i < root -> keyCount ; i ++ ){ // -1 since left and right key of every data box
231
237
inOrder (root -> keys [i ]);
232
238
if (i < root -> keyCount - 1 ) printf ("~%d~\n" ,root -> value [i ]);
0 commit comments