Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从父级获取子级的路径_Java_Tail Recursion_N Ary Tree - Fatal编程技术网

Java 从父级获取子级的路径

Java 从父级获取子级的路径,java,tail-recursion,n-ary-tree,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}

我有一份孩子和父母的名单。我还有一张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 groupMap=Service.getListofGroup(服务);

这给了我所有需要的值。 我在地图上循环寻找每个条目

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;
}
公共地图组(服务服务){
final groupMap=新HashMap();
对于(组:service.getGroups()){
groupMap.put(gp.getGroupId,gp)
}
对于(组gp:groupMap.values()){
gp.setChildren(新ArrayList());
字符串组=gp.getGroupValue();
字符串parentId=gp.getParent();
Groups parentGroup=groupMap.get(parentId);
List childs=parent.getChildren();
if(childs==null){
childs=newarraylist();
}
childs.add(gd);
} 
返回群组地图;
}

我想我可以通过将所有这些值添加到n元树,然后遍历n元树来解决这个问题。我以前从未使用过树,不知道如何从中创建n元树,并获得所有组所需的路径。非常感谢您的帮助。

像这样的东西就可以了。请注意,我没有尝试编译它,所以它几乎肯定有语法错误。但它应该能让你知道你必须做什么

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 );
}
public List getPath(节点节点,映射childToParentMap)
{
列表路径=新的ArrayList();
返回fillPath(节点,路径);
}
私有void fillPath(节点节点,映射childToParentMap,列表路径)
{
Node parent=childToParentMap.get(节点);
如果(父项!=null)
fillPath(父对象、子对象父对象映射、路径);
添加(节点);
}

请详细说明你的问题,展示一个例子,展示你的一些代码,等等。一个好的开始是:我的父列表看起来像X,我的子列表看起来像Y,我的地图看起来像Z。用一个例子填充X,Y,Z。根据示例,显示所需的路径。
Node*parent
?你的C++是漏掉的吗?)我想是的!(修正…)我更新了问题。你能看一下吗。谢谢:)你发了一个很好的,最少的,高度抽象的问题,我发了一个很好的,最少的,高度抽象的答案。我认为现在将
String
映射到
Group
Service
ArrayList
parent.getChildren()
Map
没有必要让事情变得更复杂,这些都非常特定于您的情况,其他任何人都不感兴趣,而这些都不在你最初的问题中。