Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi AVL Baum -> Umsortieren - brauche hilfe!! (https://www.delphipraxis.net/131564-avl-baum-umsortieren-brauche-hilfe.html)

wonnebeekiwi 26. Mär 2009 17:17


AVL Baum -> Umsortieren - brauche hilfe!!
 
Liste der Anhänge anzeigen (Anzahl: 1)
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:

wonnebeekiwi 26. Mär 2009 21:12

Re: AVL Baum -> Umsortieren - brauche hilfe!!
 
habs noch ein wenig umgeschrieben funktioniert aber noch nicht. bin ratlos:
Delphi-Quellcode:
procedure TAVLBaum.LLDrehung;
var Zeiger: TAVLBaum;
begin
  Zeiger := links;
  links := Zeiger.rechts;
  Zeiger.rechts := Self;
  Balance := 0;
  Self := Zeiger;
  {
  links.rechts := TAVLBaum.create(Wurzel);
  Self := links;}
end;

procedure TAVLBaum.LRDrehung;
var Zeiger1, Zeiger2: TAVLBaum;
begin
  Zeiger1 := links;
  Zeiger2 := Zeiger1.rechts;
  Zeiger1.rechts := Zeiger2.links;
  Zeiger2.links := Zeiger1;
  links := Zeiger2;
  {
  links.rechts.links := TAVLBaum.create(links.Wurzel);
  links := links.rechts;}
  LLDrehung;
end;

procedure TAVLBaum.RRDrehung;
var Zeiger: TAVLBaum;
begin
  Zeiger := rechts;
  rechts := Zeiger.links;
  Zeiger.links := Self;
  Balance := 0;
  Self := Zeiger;
  {
  rechts.links := TAVLBaum.create(Wurzel);
  Self := rechts;}
end;

procedure TAVLBaum.RLDrehung;
var Zeiger1, Zeiger2: TAVLBaum;
begin
  Zeiger1 := rechts;
  Zeiger2 := Zeiger1.links;
  Zeiger1.links := Zeiger2.rechts;
  Zeiger2.rechts := Zeiger1;
  rechts := Zeiger2;
  {
  rechts.links.rechts := TAVLBaum.create(rechts.Wurzel);
  rechts := rechts.links;}
  RRDrehung;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz