2016-03-25 9 views
0

Ich habe Probleme zu verstehen, wie genau übergebene Knoten behandelt werden, die Kinder enthalten, die Kinder usw. als Teil des Entwurfs einer Baumstruktur enthalten können.Probleme mit Knoten und Baumstrukturen (Referenzen/Nullzeiger)

Mein Code ist so, dass es zwei Objekte gibt, eines ist ein Objekt namens "Tree", das ist eigentlich nur ein "root" -Knoten mit vielen generischen Methoden, die auf den Baum als Ganzes und ein Objekt wirken Knoten genannt, der zwei String-Variablen und eine Liste von (Kinder-) Knoten enthält.

Der Knoten Code:

public class Node { 
    String type; 
    String name; 
    List<Node> children; 
    /* Constructors and other methods */ 

, dass der Code, die für die Frage wirklich alles.

Um zum Kern der Frage zu gelangen: Wie gebe ich eine Kopie eines Knotens weiter, so dass sie alle ihre Daten behält (also alle Kinder und Kinder von Kindern ...), aber nicht "verbunden" mein vorheriger Knoten? (In meinem Verständnis von Java, wenn ich zu einer anderen Methode sagt node.children passieren war und dann diese Kinder ändern, wäre es auch in der vorherigen Knoten rechts ändern?)

Danke im Voraus :)

+2

Ohne irgendeine Code ist, ist es schwer zu sagen, aber es klingt wie Sie eine Art von rekursiven tiefer Kopie Methode schreiben wollen. –

+0

Mögliches Duplikat von http://stackoverflow.com/questions/16098362/how-to-deep-copy-a-tree – Raedwald

+0

Hmm, ja, ist das der einzige Weg? denn es kann ziemlich zeitaufwendig werden, wenn ich meinen Verzweigungsfaktor von ~ 2.3 verwende. Wenn es die einzige Lösung ist, dann muss ich damit umgehen – Dominus

Antwort

1

Ich glaube, Raedwalds Antwort war richtig (obwohl ich erwartet hatte, dass es eine effizientere Lösung gibt) und deshalb schließe ich die Frage.

Mögliches Duplikat stackoverflow.com/questions/16098362/how-to-deep-copy-a-tree - Raedwald

Für Interessenten an der Antwort, mein letzter Algorithmus (eine allgemeine Version davon durch Raedwald gegeben)

public Node copy() { 
    Node nodeCopy = new Node(this.getType(), this.getName()); 
    if (this.children != null) { 
     for(int i=0; i < this.children.size(); i++) 
      nodeCopy.children.add(this.getChild(i).copy()); 
    } 
    return nodeCopy; 
}