	tree delete( pq )
	tree pq;

	{tree temp;
	if ( pq == NULL ) Error /*** deletion on an empty queue ***/;
	else if ( pq->right == NULL )
		return( pq->left );
	else	{
		/*** promote left descendant up ***/
		pq->k = pq->left->k;
		pq->left = delete( pq->left );
		/*** rearrange according to constraints ***/
		if ( pq->left == NULL ) {
			pq->left = pq->right;	pq->right = NULL;  };
		if ( pq->right != NULL )
			if ( pq->left->k < pq->right->k ) {
				/*** descendants in wrong order ***/
				temp = pq->right;
				pq->right = pq->left;
				pq->left = temp;
				}
		return( pq );
		}
	};

