其中Tree
Java中的數據結構允許查詢不同級別的兒童?我曾看過TreeNode
,JTree
。但他們似乎不支持多級查詢。如何讓樹中的後裔達到一定水平?
給定一個Tree
,對於一個特定的節點,我想得到後代達到一定的水平n
。是否有我可以使用的現有實現,還是應該自己寫?
謝謝!
其中Tree
Java中的數據結構允許查詢不同級別的兒童?我曾看過TreeNode
,JTree
。但他們似乎不支持多級查詢。如何讓樹中的後裔達到一定水平?
給定一個Tree
,對於一個特定的節點,我想得到後代達到一定的水平n
。是否有我可以使用的現有實現,還是應該自己寫?
謝謝!
這並不難寫一個廣度優先遍歷和隨訪所有的孩子到指定的水平。這是一些僞代碼。假設您有一個新類:
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>);
}
}
如果你不害怕一個複雜的API中,DOM可能是你所需要的。您可以通過XPath查詢它,應用事件的節點,等等
是彈簧想到的唯一的事情就是搖擺的DefaultTreeModel
但仍然需要一點在你的身邊編碼邏輯來獲得孩子達到一定水平。
它應該不太難推出自己的實現。
DefaultMutableTreeNode支持多種遍歷,使用其中的任何一個,以達到您的目標是左(沒有雙關語意,它是由API :)給用戶。
呃......不,你爲什麼要硬編碼進入節點?這使得它在任何其他級別都不可重用,肯定是不適合Swing的東西 – kleopatra
您在節點中看到了什麼硬編碼?我只是爲這個算法定義一個新的數據類型,使用現有的節點和一個級別值。 – Tudor
嗯..你的意思是你創建了一個新的包裝實際節點,而遍歷樹,只是爲了簿記? – kleopatra