【发布时间】:2017-09-16 10:47:29
【问题描述】:
我有一个Node 课程。它有一个children ArrayList。该列表也包含节点。并且说节点有子列表,等等。
基本上,它是一棵不太方便的树。假设我想从中删除 someNode 。那么如何递归清除所有子列表呢?
我有一个hasChildren() 方法,如果指定的节点有孩子,它会返回,我认为它必须帮助我,但还不知道如何。我还有 getChildren() 方法,它返回子列表。
这是我的一些代码,但到处都是错误的。
public void removeChild()
{
while(hasChildren())
{
getChildren();
removeChild();
}
children.clear();
}
【问题讨论】:
-
如果您有返回第一个孩子的方法,您可以使用此递归解决方案。
public static void removeChilds(Node node) { while (node.hasChildren()) node.removeChild(node.getFirstChild()); } -
可能不是重复的,但无论如何可能会回答您的问题 - How can I call a method on each element of a List? 另外,
if (hasChildren()),而不是while (hasChildren()),并不是说您真的需要它,因为上述链接中的任何解决方案都应该有效放在一个空列表上就好了。 -
@RajithPemabandu 第一个孩子是什么意思?
node.getChildren.get(0)在那种情况下不工作吗?那只会删除所有第一级的孩子,我错了吗? -
另外,如果你只是删除对你的类的引用或清除第一级,其余的将被垃圾收集器清除(或者这是你必须做的任务?)。
-
您根本不需要递归清除任何子列表。找到目标节点后只需删除它,垃圾收集器将完成剩下的工作。
标签: java recursion arraylist tree