hi.
ich komm hier nicht weiter:
ich fuege zb 20 elemente ein, es kommen aber nur ne hanvoll dabei raus.
zuerst dachte ich dass das daran liegen koennte dass das die gleichen sind. ist aber was anderes.
hab die gleichen gezaehlt und es fehlen deutlich mehr.
ich bin mir jetzt sehr sicher das die elemente bei den rotationen drauf gehen... wahrscheinlich ist da was falsch aber ich sehs nicht.
waere nett wenn sich jemand die zeit nehmen wuerde das mal zu ueberfliegen.
Delphi-Quellcode:
procedure TAVLBaum.KntnEinfuegen(pItem: TItem);
begin
if Leer then begin
Wurzel := pItem;
links := TAVLBaum.create;
rechts := TAVLBaum.create;
end
else if Wurzel.isGreater(pItem) then begin
links.KntnEinfuegen(pItem);
Balance := rechts.Hoehe - links.Hoehe;
case Balance of
2,-2: Sortieren;
end;
end
else begin
rechts.KntnEinfuegen(pItem);
Balance := rechts.Hoehe - links.Hoehe;
case Balance of
2,-2: Sortieren;
end;
end;
result := True;
end;
procedure TAVLBaum.Sortieren;
begin
if Balance = -2 then begin
if links.Balance = -1 then
LLDrehung
else
LRDrehung;
end
else begin
if rechts.Balance = 1 then
RRDrehung
else
RLDrehung;
end;
end;
procedure TAVLBaum.LLDrehung;
begin
links.rechts := TAVLBaum.create(Wurzel);
Self := links;
end;
procedure TAVLBaum.LRDrehung;
begin
links.rechts.links := TAVLBaum.create(links.Wurzel);
links := links.rechts;
LLDrehung;
end;
procedure TAVLBaum.RRDrehung;
begin
rechts.links := TAVLBaum.create(Wurzel);
Self := rechts;
end;
procedure TAVLBaum.RLDrehung;
begin
rechts.links.rechts := TAVLBaum.create(rechts.Wurzel);
rechts := rechts.links;
RRDrehung;
end;
danke!
ps nochmal der ganze code: