从父母那里获取孩子的路径

时间:2017-05-29 17:17:40

标签: java tail-recursion n-ary-tree

我有一份儿童名单和一份父母名单。我还有childeId-parentId的地图。父母可以有n个孩子但孩子有一个直系父母。 我想从Java中获取父节点中每个子节点的路径。我怎么能递归呢?

我有以下组:[Root,abc,asd,xyz,123,xyz2]

父子映射:{Root = abc,Root = asd,Root = xyz,Root = 123,xyz = xyz2}

我想让每个孩子的路径为: {Root / abc,Root / asd,Root / xyz,Root / 123,Root / xyz / xyz2}

我有一张地图:

final<String, Groups> groupMap = Service.getListOfGroups(service);

它给了我所有必需的值。 我正在遍历地图以获取每个条目。

public Map<String, Groups> takeGroups(Service servie ) {
final<String, Groups> groupMap = new HashMap<>();
for(Groups gp: service.getGroups()){
groupMap.put(gp.getGroupId, gp)
}
for(Groups gp: groupMap.values()){
   gp.setChildren(new ArrayList<>());
   String group = gp.getGroupValue();
   String parentId = gp.getParent();
   Groups parentGroup = groupMap.get(parentId);
   List<GroupSummary> childs = parent.getChildren();
   if(childs == null){
      childs = new ArrayList<>();
   }
   childs.add(gd);
 } 
 return groupMap;
}

我想我可以通过将所有这些值添加到n-ary树然后遍历n-ary树来解决这个问题。我之前从未使用过树,也不确定如何从中创建n-ary-tree并获取所有组的必需路径。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

这样的事情应该这样做。请注意,我没有尝试编译它,所以它几乎肯定有语法错误。但它应该可以帮助您了解您必须做的事情。

public List<Node> getPath( Node node, Map<Node,Node> childToParentMap )
{
    List<Node> path = new ArrayList<>();
    return fillPath( node, path );
}

private void fillPath( Node node, Map<Node,Node> childToParentMap, List<Node> path )
{
    Node parent = childToParentMap.get( node );
    if( parent != null )
        fillPath( parent, childToParentMap, path );
    path.add( node );
}