Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
MethodenAbtrennen ab einem gegebenen Knoten eines Binärbaums
ich sitze nun schon einer ganzen Weile an folgender Aufgabe und finde einfach keine Lösung (wahrscheinlich stehe ich gerade nur ziemlich auf dem Schlauch). Vielleicht könnt ihr mir weiterhelfen.
Es soll eine Objektmethode seperateBinTree für eine Klasse BinTree geschrieben werden, welche einen Knoten des aktuellen Baums übergeben bekommt und den Baum ab diesem Knoten abtrennt. Die Methode soll nichts zurückgeben. Bisher habe ich folgendes erstellt, es fehlt mir nur noch die genannte Objektmethode:
Java:
public class BinTree {
BinTree left;
BinTree right;
int value;
BinTree(BinTree l, int v, BinTree r) {
left = l;
value = v;
right = r; }
BinTree(int v) {
left = null;
value = v;
right = null; }
public static void main(String[]args) {
BinTree b1 = new BinTree(3);
BinTree b2 = new BinTree(6);
BinTree b3 = new BinTree(b1, 4, b2);
BinTree b4 = new BinTree(3);
BinTree b5 = new BinTree(b4, 2, null);
BinTree b6 = new BinTree(b5, 2, b3);
}
public int countNodes() {
int nodes = 1;
if (left != null)
nodes += left.countNodes();
if (right != null)
nodes += right.countNodes();
return nodes;
}
public void seperateBinTree (BinTree subTree) {
// HELP! :-)
}
}
Über Eure Hilfe würde ich mich sehr freuen, wahrscheinlich reicht schon ein kleiner Gedankenanstoß. ;-)
Wie genau ist die Anforderungen? Ist der Knoten immer genau einer der Kindknoten? Oder kann es ein tieferer Kindknoten sein?
Wenn es immer nur direkte Kinder sind, dann musst du lediglich prüfen, ob es das rechte oder das linke Kind ist und dann das entsprechende Kind auf null setzen.
Soll es ein beliebiges Kind eines Kindes sein, musst du eine rekursive Methode schreiben, die dir durch den Baum läuft und den entsprechenden Knoten findet (falls er existiert).
Hallo Gonzo17. Die genaue Aufgabenbeschreibung lautet: Schreiben Sie eine neue Objektmethode für die Klasse BinTree, die einen Knoten des aktuellen Baums übergeben bekommt und den Baum ab diesem Knoten abtrennt. Die Methode soll nichts zurückgeben. Beachten Sie, dass Bäume mehrere Knoten mit den gleichen Werten haben können! Sie können davon ausgehen, dass der Parameter der Methode ungleich der Wurzel des Baumes ist, für welchen die Methode aufgerufen wird. Die Tiefe des Baums kann vom Beispiel abweichen.
Der Knoten mit seinen Kindknoten soll also nicht gelöscht, sondern abgetrennt werden. Es sollte daraus also ein neuer Baum entstehen (wobei dieser in dieser Aufgabe nicht zurückgegeben werden muss). Ich stehe leider total auf dem Schlauch und komme einfach nicht weiter. :rtfm:
Du löschst das Objekt ja nicht, wenn du left oder right auf null setzt. Du löschst lediglich die Referenz auf das Objekt. Das Objekt kann selbst ja an ner ganz anderen Stelle noch existieren und verwendet werden. Aber effektiv ist dann der rechte oder linke Kindknoten dann eben entfernt für diesen Baum.