tree delete( pq )
tree pq;
{
tree le, ri;
if ( pq==NULL ) Error /*** Deletion on empty queue ***/;
else {
/*** Find left descendant of root ***/
if ( pq->left == pq ) le = NULL;
else {
le = pq->left;
while ( le->left != pq ) le = le->left;
le->left = pq->left;
};
/*** Find right descendant of root ***/
if ( pq->right == pq ) ri = NULL;
else {
ri = pq->right;
while ( ri->right != pq ) ri = ri->right;
ri->right = pq->right;
};
/*** merge them ***/
return( merge( le, ri ) );
}
};
|