Aufgabe 10.2

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Aufgabe 10.2
Ich habe nun fast die komplette Aufgabe gelöst nur bei der Methode isTree() komm ich nicht dahinter.
Und zwar habe ich es so verstanden dass es ein korrekter Baum ist wenn jeder Knoten erreichbar ist.
Nur wie soll man das realisieren? Oder ist mir da noch etwas entgangen?

Danke!


Knoten: {A,B}
Kanten: {A->B, B->A}
ist das ein Baum?


Nein.
Ist es kein Out-Tree sobald ein Knoten von mehr als einer Kante erreicht wird?


unter anderem, ja


Ja gut aber mit dieser Idee kann man das ja nicht rekursiv realisieren. Da ich mir ja irgendwo speichern muss welcher Knoten bereits angesprochen wurde.
Also hat noch irgendjemand einen kleinen Schubser in die richtige Richtung?


Damit hast du dich eigentlich schon selbst in die richtige Richtung geschubst.
Hilfreich könnte noch die ein oder andere Hilfsmethode sein.


Ich habe die Aufgabe gelöst und im Junit gibt´s kein Fehler, aber EST zeigt Kreuz. Wo könnte das Fehler sein?


Pass mal auf dass du die Hilfsmethoden private deklariert hast…


nein, das ist nicht der Fall


Ich sehe zwei Abgaben mit rotem Kreuz und beide haben das gleiche Problem: Beide kompilieren schon nicht mit dem öffentlichen Test (zumindest nicht im Inf-CIP mit seinem reinrassigen Java7, der ja Referenz-System ist)…


Und noch was Allgemeineres, was auch aber nicht nur bei dieser Aufgabe wichtig sein könnte:
0.) testet euren Code unmittelbar vor der Abgabe mit einem frisch runtergeladenen Test und möglichst im Inf-CIP
1.) vermeidet es, Attribute in Unterklassen nochmal zu deklarieren (Attribute überschreiben/überladen ist die Hölle), die man eigentlich aus der Super-Klasse erbt!
2.) vermeidet es, zusätzliche Attribute (insbesondere statische) zu verwenden, die unnötige Zustandsinformation zwischen Methodenaufrufen behalten, wenn es nicht unbedingt erforderlich ist (oftmals kann man das durch weitere Parameter in Hilfsmethoden umgehen).


Hab gerade abgegeben und hab auch ein rotes Kreuz.
Alle meine Hilfsmethoden sind private und nicht statisch, habe keine globalen Variablen.
Allerdings habe ich einen Import “import java.util.ArrayList;”
könnte es an diesem Import liegen?

EDIT: habe nun einen Haken. :slight_smile:


würdest du dann der Menschheit mitteilen wo dein Problem lag? evtl. hilft das ja dem ein oder anderen weiter


Ich hatte lediglich beim “extends AbstractBinNode” in BinNode den Datentyp vergessen.


wie umfrangreich soll den isTree() abprüfen?
aufgabe ist ja zu prüfen ob der knoten eine wurzel eines allgemeinen baumes ist.

folgendes wäre ja korrekt
Knoten: {A,B,C,D}
Kanten: {A->B, B->C;B->D}

wird isTree nur auf A ausgeführt oder auch auf B,C,D.

und soll isTree auch sowas wie unten finden?
Knoten: {A,B,C,D}
Kanten: {A->B, B->C;B->D;C->D}

also theoretisch müsst ich bei jedem knoten nochmal den ganzen baum checken, ob da irgendwo ne referenz falsch ist… ??? richtig???


Die Methode soll den aktuellen und alle dessen nachfolgenden Knoten überprüfen.

Die Aufgabe wäre ja total lächerlich, wenns nur um die direkten Nachfolger gehen würde.


ja aber muss er nicht auch die vorfahren testen. als beispiel

Knoten: {A,B,C,D}
Kanten: {A->B, B->C;B->D;C->A}

bei C.isTree(); dann müsst man doch auch die vorhfahren testen ob fälschlicherweise auf einen dieser gezeigt wird ? oder nicht? vielleicht denk ich grad auch zu kompliziert? :confused:


Jo, denke ich auch :stuck_out_tongue:

Du kommst doch an das C nicht ran ohne vorher beim B gewesen zu sein. Analog dazu kommst du nicht ans B ohne vorher beim A gewesen zu sein. Das heißt, dass dein Aufruf beim Knoten A beginnt.

Natürlich könnte man sowas wie:
A.next().next().isTree() aufrufen, wobei das erste next() = B und das zweite next() = C wären. Aber warum sollte man die ersten zwei Knoten überspringen wollen?


Das zu tun wäre unter normal umdtänden sicherlich sinnfrei, aber sman weiss ja nicht was Im geheimen testfall passiert und wir sollen doch an alles denken… :wink:

Unter normalen umständen würd ich auch einfach schon beim einfügen sicherstellen das nur ein baum entstehen kann… :D. Dann wäre das andere vermutlich überflüssig… :D.