我有一个Node
课程。它有一个children
ArrayList。该列表也包含节点。并且所述节点具有子列表,依此类推。
基本上,它是一种不太方便的树。我们想说我想从中删除一些Node
。那么如何递归清除所有子列表呢?
我有一个hasChildren()
方法,如果指定的节点有子节点,它返回,我认为它必须帮助我,但是无法弄清楚如何。我还有getChildren()
方法返回子项列表。
这是我的一些代码,但它在整个地方都是错误的。
public void removeChild()
{
while(hasChildren())
{
getChildren();
removeChild();
}
children.clear();
}
答案 0 :(得分:0)
您可以实施一个Queue
,您可以使用该Queue<Node> queue = new LinkedList<>();
queue.add(node); //node to remove
while(!queue.isEmpty()) {
Node currentNode = queue.pop();
for(Node n : currentNode.getChildren) {
queue.add(n);
{
currentNode.getChildren.clear();
}
来放置每个Node的孩子,然后从中弹出以删除它们。
像这样。
public void removeChildren(Node node)
{
for(Node n : node.getChildren()) {
removeChildren(n);
}
node.getChildren().clear();
}
更新:要以递归方式执行此操作,您可以实现类似这样的操作(只需知道java中的堆栈大小)。
string cmd = "clang -emit-llvm a.cpp -o a.bc";
system(cmd);
Module* m = parseIRFile("a.bc", Err, Content);
答案 1 :(得分:0)
在我看来,你只需要清除孩子(如下所示),垃圾收集器会自动释放剩下的物体。
serializer = ReservationSerializer(reservations, many=True)
return serializer.data