2008-09-27 49 views
12

我需要一棵樹/向無環圖的實現是這樣的:樹(向無環圖)實現

public class TreeNode<K, V> { 
    private K key; // 'key' for this node, always present 
    private V value; // 'value' for this node, doesn't have to be set 

    private TreeNode<K, V> parent; 
    private Set<TreeNode<K, V>> children; 
} 
  • 沒有任何形式的排序。
  • TreeNode只是一個圍繞密鑰和可能值的包裝(節點不必設置值)。
  • 我需要父母和孩子的鏈接。

標準API或Commons等有什麼可以做到這一點嗎?

我不介意自己寫(我肯定是不是問你們鄉親)我只是不想重新發明輪子。

+2

要小心,樹和有向無環圖不是同一回事,對於有向無環圖,這是父親的簽名:`private Set >`,因爲一個節點可以有多個父母。 – jolivier 2012-08-30 13:10:52

回答

11

似乎沒有任何類似的東西。上週我問了a similar question,最後實現了我自己的樹。我的實施方案與您的建議非常相似:

public class TreeNode<T> 
{ 
    private LinkedList<TreeNode<T>> children = new LinkedList<TreeNode<T>>(); 
    public T value { get; set; } 

    public TreeNode(T value) 
    { 
     this.value = value; 
    } 
    public LinkedList<TreeNode<T>> GetChildren() 
    { 
     return children; 
    } 
} 

您必須添加一條回到父母的鏈接。

1

我認爲最好推出自己的實現(此外,你已經得到了很好的界面)。無論如何,你打算在這棵樹上執行什麼操作?你可能想圍繞你想要的東西設計你的API ......通過鍵/值直接訪問單個節點?遍歷類型?添加/刪除操作?

5

還有http://www.jgrapht.org,它具有根據LGPL許可的軟件。但是,我必須警告你,實施你自己的事情充滿危險。如果你打算在你的結構上使用遞歸(這是一個圖),你必須確保它是非循環的,否則你會遇到無限循環問題。更好地使用他們已經處理問題的第三方代碼。