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; }
static spLetterPointer spLetterDoubleRight( spLetterPointer K3 ) { K3->right = spLetterRotateLeft( K3->right ); return spLetterRotateRight( K3 ); }
spLetterPointer spLetterDoubleLeft( spLetterPointer K3 ) { K3->left = spLetterRotateRight( K3->left ); return spLetterRotateLeft( K3 ); }