tree delete( key, t )
typekey key;
tree t;
{ if( t == NULL ) Error; /*** key not found ***/
else {
/*** search for key to be deleted ***/
if( t->k right = delete( key, t->right );
else if( t->k > key ) t->left = delete( key, t->left );
/*** key found, delete if a descendant is NULL ***/
else if( t->left == NULL ) t = t->right;
else if( t->right == NULL ) t = t->left;
/*** no descendant is null, rotate on heavier side ***/
else if( wt( t->left ) > wt( t->right ) )
{ t = rrot( t ); t->right = delete( key, t->right ); }
else { t = lrot( t ); t->left = delete( key, t->left ); }
/*** reconstruct weight information ***/
if( t != NULL ) {
t->weight = wt( t->left ) + wt( t->right );
t = checkrots( t );
}
}
return( t );
}
|