递归删除列表中的所有子列表

时间:2017-04-20 01:33:12

标签: java recursion arraylist tree

我有一个Node课程。它有一个children ArrayList。该列表也包含节点。并且所述节点具有子列表,依此类推。

基本上,它是一种不太方便的树。我们想说我想从中删除一些Node。那么如何递归清除所有子列表呢?

我有一个hasChildren()方法,如果指定的节点有子节点,它返回,我认为它必须帮助我,但是无法弄清楚如何。我还有getChildren()方法返回子项列表。

这是我的一些代码,但它在整个地方都是错误的。

    public void removeChild()
    {
        while(hasChildren())
        {
            getChildren();
            removeChild();            
        }

    children.clear();
}

2 个答案:

答案 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