我正在使用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;
}
我的意思是该方法应该提供一堆子节点
我看到了班级的方法,但我没有找到直接的解决方案。
答案 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;
}