Hallo,
zuerst einmal würde mich interessieren wie du die Klasse TKnoten aufgebaut hast.
Ein Baum hat ja den Sinn, gewisse Sachen leichter zu finden oder irgendwelche Sachen strukturiert abzuspeichern. Dein Baum besitzt jedoch gar keine Struktur. Zumindest wird das Einfügen nach keiner Struktur geregelt. Naja eigentlich wird auch gar nix eingefügt.
Deine Funktion gibt immer einen leeren Knoten zurück. Um dir die Funktionsweise der Funktion nochmal vor Augen zu führen:
- du schaust, ob schon geadded wurde (keine Ahnung warum, lass es einfach weg, da die Rekursion doch nach "Added := True;" gar nicht fortgesetzt wird)
- nun schaust du ob Knoten = nil ist.
a) wenn er das ist, dann legst du einen leeren Knoten an (und gibst ihn zurück)
b) wenn er etwas enthält, dann guckst du, ob der erste Unterknoten leer ist:
- ist er leer rufst du deine Funktion mit dem leeren erneut auf und a) tritt ein
- ist er nicht leer, wird deine Funktion mit Unterknoten 2 (egal ob er leer ist oder nicht) aufgerufen (dort geht's dann weiter)
Ich geh davon aus, dass eigentlich im Baum das Ende gesucht werden soll und dann der ganze Knoten angehängt wird.
Ok wenn man das nun ändert bleibt trotzdem noch folgendes:
Wenn du mehr als 2 Unterknoten hast werden die restlichen außer acht gelassen. Außerdem wird dein 2. Unterknoten total vollgeschaufelt, während im 1. nur 1 Datensatz steht.
Angenommen, deine Struktur soll so aufgebaut sein, dann würde ich aus der Funktion ne Prozedur machen, die dann so aussieht:
Delphi-Quellcode:
proceudre Hinzufuegen(var Baum: TKnoten; Knoten: TKnoten);
begin
if Assigned(Baum) then
begin //hier wird bis zum letzen existierenden Knoten gesprungen
if not Assigned(Baum.Knoten[1]) then
Hinzufuegen(Baum.Knoten[1], Knoten)
else
Hinzufuegen(Baum.Knoten[2], Knoten);
end
else //sonst wird auf einem freien Zweig ein neuer Knoten erzeugt
begin
Baum := TKnoten.Create;
Baum := Knoten
end;
end;
PS:
Ich mach sowas meistens mit Records. Das könnte so aussehen.
Delphi-Quellcode:
type
PBaum = ^TBaum;
TBaum = record
links, rechts: PBaum;
dat: TDatentyp
end;
mfg Niels