Einzelnen Beitrag anzeigen

wonnebeekiwi

Registriert seit: 23. Mär 2009
16 Beiträge
 
#1

AVL Baum -> Umsortieren - brauche hilfe!!

  Alt 26. Mär 2009, 17:17
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:
Angehängte Dateien
Dateityp: zip avl-baum_l_uft_581.zip (239,2 KB, 3x aufgerufen)
  Mit Zitat antworten Zitat