static spLetterPointer spLetterRotateLeft( spLetterPointer K2 ) { spLetterPointer K1; K1 = K2->left; K2->left = K1->right; K1->right = K2; K2->binary_height = spMax( spLetterGetHeight( K2->left ), spLetterGetHeight( K2->right ) ) + 1; K1->binary_height = spMax( spLetterGetHeight( K1->left ), spLetterGetHeight( K2 ) ) + 1; return K1; }
spLetterPointer spLetterRotateRight( spLetterPointer K1 ) { spLetterPointer K2; K2 = K1->right; K1->right = K2->left; K2->left = K1; K1->binary_height = spMax( spLetterGetHeight( K1->left ), spLetterGetHeight( K1->right ) ) + 1; K2->binary_height = spMax( spLetterGetHeight( K2->right ), spLetterGetHeight( K1 ) ) + 1; return K2; }
static spLetterPointer spFontInsert( spLetterPointer letter, spLetterPointer root ) { if( root == NULL ) { root = letter; letter->binary_height = 0; letter->left = NULL; letter->right = NULL; } else if( letter->character < root->character ) { root->left = spFontInsert( letter, root->left ); if( spLetterGetHeight( root->left ) - spLetterGetHeight( root->right ) == 2 ) if( letter->character < root->left->character ) root = spLetterRotateLeft( root ); else root = spLetterDoubleLeft( root ); } else if( letter->character > root->character ) { root->right = spFontInsert( letter, root->right ); if( spLetterGetHeight( root->right ) - spLetterGetHeight( root->left ) == 2 ) if( letter->character > root->right->character ) root = spLetterRotateRight( root ); else root = spLetterDoubleRight( root ); } root->binary_height = spMax( spLetterGetHeight( root->left ), spLetterGetHeight( root->right ) ) + 1; return root; }