![]() |
Binärbaum - Problem: StackOverflow
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:
Schluessel ist hierbei immer der jeweilige Integerwert, der im Teilbaumg espeichert werden soll.
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; 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:
womit sogar fetgelegt wird, dass kein Nachfolger exisitert.
constructor TBBaum.Create (n: Integer);
begin inherited create; setzeschluessel(n); setzelinks(nil); setzerechts(nil); end; 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 |
Re: Binärbaum - Problem: StackOverflow
Delphi-Quellcode:
Der Konstruktor Create hat 2 verschiedene Aufrufmodi:
procedure TBBaum.Einfuegen (n: Integer);
begin if gibschluessel>n then begin if giblinks <> nil then giblinks.Einfuegen(n) else // Wenn du denkst, dass der Aufruf von create(n) ein neues Objekt erzeugt, liegst du falsch !! setzelinks(create(n)) setzelinks(TBBaum.create(n)) // So wird ein neues Objekt erzeugt ... Bei TKlasse.Create wird ein neues Objekt erzeugt und anschliesend die Konstruktor-Methode aufgerufen. Bei self.Create wird nur die Konstruktor-Methode aufgerufen. |
Re: Binärbaum - Problem: StackOverflow
Ich danke wirklich sehr =) Du warst meine Rettung! Vielen vielen dank^^ Da wär ich auch nie drauf gekommen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz