现在我怎么能删除那些空节点,所以,我想无论是节点在同一时间
遍历树,只有其他节点或只长叶子但不能同时检查其具备以下条件
- 节点是叶
- 有没有叶子的兄弟姐妹。
即使我可以告诉大家,我是在节点是需要被移除我要告诉他的父母,除去他我不能告诉他,从他的父节点删除自己的一个节点。
这就是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'等节点? –
我不想删除这些节点的原因是因为它们是不包含其他树叶的树叶。基本上我想从没有孩子的节点中删除没有孩子的节点,所以我想要一个节点只有其他节点或只有叶子,但不能同时在两个节点上。抱歉,但我不能发布代码我有沙发,因为我没有访问它的电脑,我不允许把我的工作带回家。 –