2017-05-29 44 views
0

我有一個孩子的列表和父母的列表。我也有一個childeId-parentId的地圖。父母可以有n個孩子,但孩子有一個直系父母。 我想從Java中的父級獲取每個孩子的路徑。我怎樣才能遞歸呢?從父母那裏獲得孩子的路徑

我有基團爲:根,ABC,ASD,XYZ,123,XYZ2]

父子圖:{根= ABC,根系= ASD,根系= XYZ,根系= 123,XYZ = XYZ2}

我想每個孩子的路徑爲: {根/ ABC,根/ ASD,根/ XYZ,根/ 123根/ 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元樹來解決此問題。我從來沒有在樹上工作過,也不知道如何從中創建n-ary-tree並獲得所有組的必需路徑。真的很感謝任何幫助。

+0

能否請詳細說明你的問題,顯示一個例子,顯示了一些代碼等的一個良好的開端應該是:我父列表看起來像X,我的孩子名單看起來像Y,和我的地圖看起來像ž用一個例子填充X,Y,Z。根據示例,顯示您想要的路徑。 –

回答

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); 
} 
+0

'Node * parent'?你的C++泄漏了嗎? :) –

+0

@HuguesMoreau C - :=我猜是的! (正在修復...) –

+0

我已更新問題。你能看看嗎?謝謝:) –