AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Binärbaum - Problem: StackOverflow
Thema durchsuchen
Ansicht
Themen-Optionen

Binärbaum - Problem: StackOverflow

Ein Thema von DerKaeptn · begonnen am 21. Mai 2008 · letzter Beitrag vom 21. Mai 2008
Antwort Antwort
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
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Binärbaum - Problem: StackOverflow

  Alt 21. Mai 2008, 18:26
Delphi-Quellcode:
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
...
Der Konstruktor Create hat 2 verschiedene Aufrufmodi:
Bei TKlasse.Create wird ein neues Objekt erzeugt und anschliesend die Konstruktor-Methode aufgerufen.
Bei self.Create wird nur die Konstruktor-Methode aufgerufen.
Andreas
  Mit Zitat antworten Zitat
DerKaeptn

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

Re: Binärbaum - Problem: StackOverflow

  Alt 21. Mai 2008, 19:34
Ich danke wirklich sehr =) Du warst meine Rettung! Vielen vielen dank^^ Da wär ich auch nie drauf gekommen
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:57 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