![]() |
Neuer Titel, Altes Prob: Mein Binärbaum
Hallo!
Also ich hab da ein prob das mich schon seit tagen aufregt: Ich soll einen binär-baum als klasse TBinTree implementieren. Dazu hab ich eine Klasse TBinTreeNode für einen Knoten des Baumes mit den Eigenschaften left,right,value (Linker Nachfolger, Inhalt, Rechter Nachfolger). Außerdem befinden sich in dieser Klasse noch Prozeduren wie zum Beispiel leftinsert, rightinsert, create(l:tbintreenode;v:value;r:tbintreenode) <---- in TBinTreenode (???????) Die Klasse TBinTree hat die Variable "Root:TbinTreeNode", als Zeiger für die "Wurzel" des Baumes. Nun will ich die Prozedure leftinsert implementieren und stoße dabei auf ein Problem: Ich will ein Element der Klasse TBinTreeNode an Root (TbinTree) anhängen. Dabei funktioniet TBintree.root.left:=neuerknoten; nicht. Root findet er nicht, sonst alles andere auch nicht. Könntet ihr mir mal helfen? :wall: :wall: :wall: :gruebel: :gruebel: :gruebel: :wiejetzt: :wiejetzt: :wiejetzt: Fee |
Re: HILFE!
Hallo und herzlich willkommen in der DP. :dp:
Bitte benutze den Edit-Button (http://www.delphipraxis.net/template.../icon_edit.gif) und gebe Deinem Beitrag einen aussagekräftigen Titel. ;-) Danke Dir. |
Re: HILFE! BINÄRBAUM ;-P
Dazu müsste man wohl mal ein bissl Quelltext sehen (z.B. Deklaration von TBinTreeNode,...), um sagen zu können, woran es liegt.
Wie weit bist du denn schon gekommen? MfG Binärbaum |
Re: HILFE! Dringed, warum geht das so nicht?
Der Titel ist natürlich schon vieeel besser, und so problembeschreibend :). Er sollte auf das eigentliche Problem hinweisen, nicht darauf dass es dringend ist. Das ist hier jede 2. Frage ;)
|
Re: HILFE! Dringed, warum geht das so nicht?
Zitat:
|
Re: HILFE! Dringed, warum geht das so nicht?
habt ja recht ich such den quelltext mal und stell den hier rein, moment^^
|
Re: HILFE! Dringed, warum geht das so nicht?
Du hast den Titekl ja immer noch nicht aussagekräftig gemacht. :warn:
|
Re: HILFE! Dringed, warum geht das so nicht?
Das ist der Quelltext:
Delphi-Quellcode:
------------------------
unit Unit2;
interface type tbintreenode=class private left,right:tbintreenode; value:string; public constructor create (l: tbintreenode; v:string; r: tbintreenode); function empty:boolean; procedure insertLeft(l:tbintreenode); {procedure insertRight(r:Tbintreenode); function leftTree:Tbintreenode; function Righttree:Tbintreenode; function elem:string; function count: Integer; function depth: integer;} end; Type TBinTree=class public root:tbintreenode; constructor create; function empty:boolean; {function depth:integer; function count:integer; destructor destroy;} end; implementation constructor tbintree.create; begin root:=tbintreenode.create(Nil,'A',Nil); end; function tbintree.empty; begin if (root.left=Nil) and (root.right=Nil) then result:=true else result:=false; end; //------------------------------------------------ constructor tbintreenode.create(l:tbintreenode; v:string; r:tbintreenode); begin left:=l; right:=r; value:=v; end; function tbintreenode.empty:boolean; begin end; procedure tbintreenode.insertLeft(l:tbintreenode); var neuerknoten,tl:tbintreenode; begin neuerknoten:=l; if neuerknoten.value=tbintree.root.value then begin end; end; end. ich weiß ist net viel aber unter insertleft wollt ich dann Tbintree.root benutzen, findet der aber net..... oder das im if-teil ist auch ein fehler. warum? Titel kommt sofort ^^ Fee [edit=Luckie]Delphi-Tags eingefügt. Beim nächsten Mal bitte selber machen. Mfg, Luckie[/edit] |
Re: Neuer Titel, Altes Prob: Mein Binärbaum
[Edit]
Sorry, war falsch. [/Edit] |
Re: Neuer Titel, Altes Prob: Mein Binärbaum
Könntest du den Code bitte mal formatieren, der is ja unlesbar. Außerdem: was willst du uns damit
Zitat:
Dust Signs |
Re: Neuer Titel, Altes Prob: Mein Binärbaum
hey, danke!
Wie geht das? dann mach ich es selbst ^^ Fee P.S.:Schon jemand was entdeckt? ich krieg noch die krise und mein info lehrer ist alles andere als hilfsbereit.... den kann ich nicht fragen :( :( :( Meine Klassen ignorieren sich gegenseitig, ich weiß auch nicht weiter... |
Re: HILFE! Dringed, warum geht das so nicht?
Zitat:
MfG Binärbaum |
Re: Neuer Titel, Altes Prob: Mein Binärbaum
ja ich weiß aber wie soll ich das sonst machen?
Die deklarationen hat mein info-lehrer vorgegeben, hat der sich vertan oder geht das? |
Re: Neuer Titel, Altes Prob: Mein Binärbaum
Zitat:
Man könnte die Deklaration so ändern:
Delphi-Quellcode:
Demzufolge würde ich die Funktionen für Einfügen usw. seperat schreiben, ohne Klassen zu verwenden. Dann kann man rekursiv auf dem Baum traversieren. Ist meines Erachtens nach einfacher zu implementieren, wenn auch nicht so schön wie mit Klassen.
type PBinTree = ^TBinTree;
TBinTree = record left, right: PBinTree; value: string; end; MfG Binärbaum |
Re: Neuer Titel, Altes Prob: Mein Binärbaum
Ja das ist das Prob, ich hab keine wahl.
sonst geht das nicht? das was du geschreiben hast, hatten wir noch nicht :( |
Re: Neuer Titel, Altes Prob: Mein Binärbaum
Tja, wenn das so vorgegeben ist, und du unbedingt im TBinTreeNode auf TBinTree.root zugreifen willst, dann kann man das über einen Zeiger lösen. Dazu übergibst du der Prozedur als zusätzlichen Parameter noch einen Pointer auf TBinTree. Somit kannst du auch darauf zugreifen.
(Was besseres fällt mir im Moment nicht ein.) [Edit] Oder darf man die Prozeduren auch nicht ändern? [/Edit] |
Re: Neuer Titel, Altes Prob: Mein Binärbaum
meinst du damit, ich soll in der prozedur noch eine variable vom typ TBintreenode (var wurzel:Tbintreenode) deklarieren und dann bsp: Wurzel:=root?
oder wurzel:=tbintree.root? |
Re: Neuer Titel, Altes Prob: Mein Binärbaum
ach was, VERGISS es!! Fang bloß nicht mit type PBinTreeNode = ^TBinTreeNode an, dein ansatz ist viel besser.
Problem ist dies:
Delphi-Quellcode:
was ist denn TBinTree? Eine Klasse. Also keine Instanz.
if neuerknoten.value=tbintree.root.value then begin
Der Inhalt von InsertLeft könnte wie folgt aussehen:
Delphi-Quellcode:
fertig, warum willst du irgendwas mit Root prüfen? Wozu braucht die Node überhaupt ein Wissen über die Root?
Left := L;
|
Re: Neuer Titel, Altes Prob: Mein Binärbaum
Zitat:
Delphi-Quellcode:
Das müsste dann funktionieren. Tree muss natürlich der zugehörige TBinTree sein.
procedure tbintreenode.insertLeft(l:tbintreenode; var Tree: TBinTree);
var neuerknoten,tl:tbintreenode; begin neuerknoten:=l; if neuerknoten.value=tree.root.value then begin end; end; |
Re: Neuer Titel, Altes Prob: Mein Binärbaum
Jo danke ich probiers mal aus!
:thumb: :thumb: :thumb: |
Re: Neuer Titel, Altes Prob: Mein Binärbaum
außerdem warum unterscheidest du zw. TBinTree und TBinTreeNode? Eine Node ist doch ein Baum. Ich würde es so machen:
Delphi-Quellcode:
unit Unit2;
interface type TBinTreeNode = class private FLeft, FRight: TBinTreeNode; FValue: string; procedure SetLeft(l: TBinTreeNode); public constructor Create; destructor Destroy; Override; function IsEmpty: Boolean; property Left: TBinTreeNode read FLeft write SetLeft; {property Right und Value ähnlich, außerdem Depth etc)} end; implementation constructor TBinTreeNode.Create; begin FLeft := nil; FRight := nil; FValue := ''; end; destructor TBinTreeNode.Destroy; begin FLeft.Free; FRight.Free; end; procedure TBinTreeNode.SetLeft(l: TBinTreeNode); begin FLeft := l; end; end. |
Re: Neuer Titel, Altes Prob: Mein Binärbaum
das ist die vorgabe meines info-lehrers ich würds auch ganz anders machen ^^
|
Re: Neuer Titel, Altes Prob: Mein Binärbaum
Zitat:
Delphi-Quellcode:
prüfen?
if neuerknoten.value=tbintree.root.value then ...
Falls nein, dann lass' es einfach weg. Man könnte doch auch "einfach so" einfügen, ohne die Wurzel zu überprüfen. Falls es aber unbedingt sein muss, dann wirst du dir was einfallen lassen müssen (z.B. Zeiger) oder wie auch immer du das lösen willst. MfG Binärbaum PS: Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:12 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