	procedure delete( var pq : tree );
	var	le, ri : tree;

	begin
	if pq=nil then Error {*** deletion on empty queue ***}
	else	begin
		{*** find left descendant of root ***}
		if pq^.left = pq then le := nil
			else begin
				le := pq^.left;
				while le^.left <> pq do le := le^.left;
				le^.left := pq^.left
				end;
		{*** find right descendant of root ***}
		if pq^.right = pq then ri := nil
			else begin
				ri := pq^.right;
				while ri^.right <> pq do ri := ri^.right;
				ri^.right := pq^.right
				end;
		{*** merge descendants ***}
		pq := merge( le, ri )
		end
	end;
