hier der fertige code der so in etwa funktionieren müsste, leider steige ich in "fall3" irgendwie nicht richtig durch.
Delphi-Quellcode:
procedure delete(p: PDynArray; var loesch: PDynArray);
var vor: PDynArray;
begin
vor := p;
suchevor(loesch,vor);
if (loesch^.left = nil) and (loesch^.right = nil) then
free(loesch)
else
if (loesch^.Right = nil) then
aufruecken(vor,loesch,loesch^.left)
else
if (loesch^.Left = nil) then
aufruecken(vor,loesch,loesch^.right)
else
fall3(loesch);
end;
procedure aufruecken(vor,akt,nach : PDynArray);
begin
if (vor^.Right = akt) thenvor^Right := nach
else vor^.Left := nach;
free(akt);
end;
procedure suchevor(loesch:PDynArray; var vor:PDynArray);
begin
while (vor^.left <> loesch) and (vor^.right <> loesch) do
if (vor^.Daten < loesch^.Daten) then vor := vor^.Right
else vor := vor^.Left;
end;
procedure fall3(loesch: PDynArray);
var
akt,akt2:PDynArray;
begin
akt := loesch^.Left;
akt2 := akt;
while (akt^.Right <> nil) do
begin
akt2 := akt;
akt := akt^.Right;
end;
loesch^.Daten := akt^.Daten;
akt2^.Right := nil;
free(akt);
end;