我正在使用java 8。我发现有一个对象TreeMap在java中预先实现。 我想知道如何获取某个节点的子节点。
我编写了以下递归代码,但它不起作用。
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;
}
我的意思是该方法应该提供一堆子节点
我看到了该类的方法,但没有找到直接的解决方案。
最佳答案
它不起作用的原因是你没有对递归调用的结果做任何事情。您必须将这些子项附加到结果。
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
<b>nodesToDelete.addAll(</b>findChildrenToDelete(children.get(i))<b>)</b>;
}
return nodesToDelete;
}
或者,您可以传递对正在构建的集合的引用,并在递归期间添加到集合中:
static TreeMap<String,ArrayList<SimpleNode>> tree = new TreeMap<String,ArrayList<SimpleNode>>();
public Stack findChildrenToDelete(SimpleNode parentNode){
<b>return findChildrenToDelete(parentNode,new Stack());</b>
}
public Stack findChildrenToDelete(SimpleNode parentNode<b>, Stack nodesToDelete</b>){
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)<b>,nodesToDelete</b>);
}
return nodesToDelete;
}
关于java - 获取 TreeMap 中给定节点的所有子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43181098/