2016-03-25 32 views
0

我在理解如何正確處理包含可能包含子節點的子節點的傳遞節點等問題,這是樹結構設計的一部分。節點和樹結構有問題(引用/空指針)

我的代碼是這樣的,有兩個對象,一個是名爲「Tree」的對象,它實際上只是一個「根」節點,有許多通用方法作爲整體對樹進行操作,而一個對象稱爲節點,它包含兩個字符串變量和一個(子節點)節點列表。

節點代碼:

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

這真的是爲這個問題所必需的所有代碼。

爲了解決問題的核心:如何傳遞一個節點的副本使其保留所有的數據(所有孩子和孩子的孩子..),但沒有「連接」到我的前一個節點? (在我的Java的理解,如果我是通過說node.children另一種方法,然後修改這個孩子,就可以修改它的前一個節點吧?)

預先感謝您:)

+2

沒有一些代碼,很難說,但它聽起來像你想寫某種遞歸深度複製方法。 –

+0

可能的重複http://stackoverflow.com/questions/16098362/how-to-deep-copy-a-tree – Raedwald

+0

嗯是的,這是唯一的方法嗎?因爲它可以花費相當多的時間,因爲我的分支因子爲2.3。如果它是唯一的解決方案,那麼我將不得不處理它 – Dominus

回答

1

我相信Raedwald的回答是正確的(儘管我預計會有更有效的解決方案),因此我正在回答這個問題。

stackoverflow.com/questions/16098362/how-to-deep-copy-a-tree的可能的複製 - Raedwald

對於那些有興趣的答案,我的最終算法(普通版由Raedwald給出)是

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; 
}