在TreeMap中获取给定节点的所有子节点

时间:2017-04-03 09:31:47

标签: java parent-child treemap

我正在使用java 8.我发现在java中预先存在一个对象TreeMap。 我想知道如何获得某个节点的子节点。

我编写了以下递归代码,但它不起作用。

static TreeMap<String,SimpleNode> tree = new TreeMap<String,SimpleNode>();

public Stack findChildrenToDelete(SimpleNode parentNode){
    Stack nodesToDelete = new Stack();
    nodesToDelete.add(parentNode.getId());
    SimpleNode children=tree.get(keyMaker(parentNode.getId(), parentNode.getType()));


        findChildrenToDelete(children.get(i));

     return  nodesToDelete;  
} 

我的意思是该方法应该提供一堆子节点

我看到了班级的方法,但我没有找到直接的解决方案。

1 个答案:

答案 0 :(得分:0)

您必须将这些孩子附加到结果

static TreeMap<String,ArrayList<SimpleNode>> tree = new TreeMap<String,ArrayList<SimpleNode>>();

public Stack findChildrenToDelete(SimpleNode parentNode){
    Stack nodesToDelete = new Stack();
    nodesToDelete.add(parentNode.getId());
    ArrayList<SimpleNode> children=tree.get(keyMaker(parentNode.getId(), parentNode.getType()));

    for(int i=0;i<children.size();i++){
        // add recursive children to the result
        nodesToDelete.addAll(findChildrenToDelete(children.get(i)));
    }
    return nodesToDelete;  
}

或者,您可以将引用传递给正在构建的集合,并在递归期间添加到集合中:

static TreeMap<String,ArrayList<SimpleNode>> tree = new TreeMap<String,ArrayList<SimpleNode>>();

public Stack findChildrenToDelete(SimpleNode parentNode){
    return findChildrenToDelete(parentNode,new Stack());
}
public Stack findChildrenToDelete(SimpleNode parentNode, Stack nodesToDelete){
    nodesToDelete.add(parentNode.getId());
    ArrayList<SimpleNode> children=tree.get(keyMaker(parentNode.getId(), parentNode.getType()));

    for(int i=0;i<children.size();i++){
        // pass a reference to the collection recursively
        findChildrenToDelete(children.get(i),nodesToDelete);
    }
    return nodesToDelete;  
}