2011-11-22 25 views
2

其中Tree Java中的數據結構允許查詢不同級別的兒童?我曾看過TreeNodeJTree。但他們似乎不支持多級查詢。如何讓樹中的後裔達到一定水平?

給定一個Tree,對於一個特定的節點,我想得到後代達到一定的水平n。是否有我可以使用的現有實現,還是應該自己寫?

謝謝!

回答

1

這並不難寫一個廣度優先遍歷和隨訪所有的孩子到指定的水平。這是一些僞代碼。假設您有一個新類:

public class NodeWithLevel { 
    Node node; 
    int level; 
} 

此類僅用於此算法的包裝。 那麼「讓所有節點多達N級」的方法是:

Queue<NodeWithLevel> queue; 
queue.enqueue(<0, tree.root>);  
currentLevel = 0; 
while(currentLevel < N) { 
    NodeWithLevel current = queue.dequeue(); 
    currentLevel = current.level; 
    // do whatever with current 
    for(Node child: current.node.children) { 
     queue.enqueue(<current.level + 1, child>); 
    }   
} 
+0

呃......不,你爲什麼要硬編碼進入節點?這使得它在任何其他級別都不可重用,肯定是不適合Swing的東西 – kleopatra

+0

您在節點中看到了什麼硬編碼?我只是爲這個算法定義一個新的數據類型,使用現有的節點和一個級別值。 – Tudor

+0

嗯..你的意思是你創建了一個新的包裝實際節點,而遍歷樹,只是爲了簿記? – kleopatra

0

如果你不害怕一個複雜的API中,DOM可能是你所需要的。您可以通過XPath查詢它,應用事件的節點,等等

0

是彈簧想到的唯一的事情就是搖擺的DefaultTreeModel但仍然需要一點在你的身邊編碼邏輯來獲得孩子達到一定水平。

它應該不太難推出自己的實現。

1

DefaultMutableTreeNode支持多種遍歷,使用其中的任何一個,以達到您的目標是左(沒有雙關語意,它是由API :)給用戶。