PROCEDURE FIXHEAP; VAR X:INTEGER; Z:A; PROCEDURE READOUT(VAR P:A); VAR I:INTEGER; PROCEDURE SUBREAD(VAR Q:A); BEGIN NEW(Q); READ(Q^.C); IF Q^.C=0 THEN Q:=NIL ELSE BEGIN SUBREAD(Q^.D); SUBREAD(Q^.E) END END; BEGIN NEW(P); ROOT:=P; READ(P^.C); IF P^.C<>0 THEN BEGIN SUBREAD(P^.D); SUBREAD(P^.E) END; WRITELN; READLN(MAX); FOR I:=1 TO MAX DO READ(KEY[ I ]); READLN; FOR I := 1 TO MAX DO WRITE( KEY[ I ] :4); WRITELN END; BEGIN (*FIXHEAP*) READOUT(P); K:=KEY[ P^.C ]; BOOL:=TRUE; WHILE((P^.D<>NIL) OR (P^.E<>NIL)) AND (BOOL) DO WITH P^ DO BEGIN IF (D<>NIL) AND (E<>NIL) THEN BEGIN M:=D; IF KEY[D^.C] < KEY[E^.C] THEN M:=E; END ELSE IF D=NIL THEN M:=E ELSE M:=D; IF K < KEY[M^.C] THEN BEGIN KEY[C]:=KEY[M^.C]; P:=M; END ELSE BOOL:=FALSE; END ; KEY[ P^.C ] := K END ;