Einzelnen Beitrag anzeigen

DerKaeptn

Registriert seit: 21. Mai 2008
2 Beiträge
 
#1

Binärbaum - Problem: StackOverflow

  Alt 21. Mai 2008, 17:23
Hiho,
ich weiß, dass es schon gaaanz viele Binärbaumthreads gibt, aber keienr behandelt das Probelm von mir xD Und dazu finden kann ich nichts, da es einfach zu speziell ist =/
Es geht um folgendes:
Ich soll einen Binärbaum erstellen. Dabei erstelle ich bei FormCreate zuerst die Wurzel, genannt "Baum". Nun würde ich gerne einen IntegerWert in den Baum einfügen, indem ich eben Kinder erstelle, die entweder links des oberen Teilbaums (wenn kleiner) oder rechts (wenn größer) angeordnet sind. Dann beginnt jedochd as Schlammassel. Erst lese ich in der GUI einen Wert aus einem Edit Feld und überge diesen Parameter an die Fachklasse TBBaum. Dort habe ich meine Funktion Einfuegen.

Delphi-Quellcode:
procedure TBBaum.Einfuegen (n: Integer);
begin
    if gibschluessel>n then
      begin
      if giblinks <> nil then
        giblinks.Einfuegen(n)
      else
        setzelinks(create(n))
      end
    else
      begin
      if gibschluessel<n then
        begin
        if gibrechts <> nil then
          gibrechts.Einfuegen(n)
        else
          setzerechts(create(n));
        end;
      end;
end;
Schluessel ist hierbei immer der jeweilige Integerwert, der im Teilbaumg espeichert werden soll.
Wenn ich das Programm mit F7 durchlaufen lasse, passiert eben das merkwürdige, dass er (angenommen der Schlüssel des aktuellen Baumes ist 5, und ich will eine 7 einfügen) er sagt: Okay, der Schöüssel ist <n (stimmt ja), dann schaut er ob rechts NIL ist (ja), aber er trotzdem wieder rekursiv das Einfuegen aufruft. =/
Ich habe sogar extra beim Creator hinzugeschrieben:
Delphi-Quellcode:
constructor TBBaum.Create (n: Integer);
begin
  inherited create;
  setzeschluessel(n);
  setzelinks(nil);
  setzerechts(nil);
end;
womit sogar fetgelegt wird, dass kein Nachfolger exisitert.
Ich hoffe man kann mir helfen^^ Ich sitze ejtzt schon 1 Woche an dem Problem und mein Informatik Lehrer sieht den Fehler auch nicht xD
  Mit Zitat antworten Zitat