| 
	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 ) );
		}
	};
 |