現在我怎麼能刪除那些空節點,所以,我想無論是節點在同一時間
遍歷樹,只有其他節點或只長葉子但不能同時檢查其具備以下條件
- 節點是葉
- 有沒有葉子的兄弟姐妹。
即使我可以告訴大家,我是在節點是需要被移除我要告訴他的父母,除去他我不能告訴他,從他的父節點刪除自己的一個節點。
這就是DefaultTreeModel.removeNodeFromParent()方法所做的。因此,您可以遞歸地遍歷樹並根據您的給定條件刪除節點。
DefaultMutableTreeNode root = new DefaultMutableTreeNode ("Root");
//other code
DefaultTreeModel treeModel = new DefaultTreeModel(root);
JTree tree = new JTree(treeModel);
//populate tree
recurseTree(root, treeModel);
//method to recursively remove leaf nodes that have non-leaf siblings
private void recurseTree(MutableTreeNode node, DefaultTreeModel treeModel){
if (node.isLeaf()){
TreeNode parent = node.getParent();
for (int i = 0; i < parent.getChildCount(); i++){
if (!parent.getChildAt(i).isLeaf()){
treeModel.removeNodeFromParent(node);
break;
}
}
}else{
for (int i = 0; i < node.getChildCount(); i++){
recurseTree((MutableTreeNode)node.getChildAt(i), treeModel);
}
}
}
所有這些都說了,它看起來像圍繞着這些節點的初始添加的漫長路線。在不知道底層數據結構來填充樹的情況下,人們只能猜測如何防止首先添加這些節點。
請發表您迄今嘗試過的代碼。 – SomeDude
1)爲了更快地獲得更好的幫助,請發佈[MCVE]或[簡短,獨立,正確的示例](http://www.sscce.org/)。 2)爲什麼沒有興趣去除沒有孩子的'Dull','Pressure','Burning'等節點? –
我不想刪除這些節點的原因是因爲它們是不包含其他樹葉的樹葉。基本上我想從沒有孩子的節點中刪除沒有孩子的節點,所以我想要一個節點只有其他節點或只有葉子,但不能同時在兩個節點上。抱歉,但我不能發佈代碼我有沙發,因爲我沒有訪問它的電腦,我不允許把我的工作帶回家。 –