I am trying to iterate a graph-dict object and reach every time the leave nodes, and i want to do it for different level of depth of the graph (if the leaves are in a deeper level )
{'Node': [0, 0, 0],
'children': [{'Node': [1, 0, 0],
'children': [{'Node': [2, 0, 0], 'children': []},
{'Node': [1, 1, 0], 'children': []},
{'Node': [1, 0, 1], 'children': []}]},
{'Node': [0, 1, 0],
'children': [{'Node': [1, 1, 0], 'children': []},
{'Node': [0, 2, 0], 'children': []},
{'Node': [0, 1, 1], 'children': []}]},
{'Node': [0, 0, 1],
'children': [{'Node': [1, 0, 1], 'children': []},
{'Node': [0, 1, 1], 'children': []},
{'Node': [0, 0, 2], 'children': []}]}]}
In particular i want to do something with this leaves nodes,(i have a function that can add other children) but with a parallel logic, using libraries like multiprocessing or joblib exc..
CodePudding user response:
You can use recursion in this case. Below is a sample code.
graph={'Node': [0, 0, 0],
'children': [{'Node': [1, 0, 0],
'children': [{'Node': [2, 0, 0], 'children': []},
{'Node': [1, 1, 0], 'children': []},
{'Node': [1, 0, 1], 'children': []}]},
{'Node': [0, 1, 0],
'children': [{'Node': [1, 1, 0], 'children': []},
{'Node': [0, 2, 0], 'children': []},
{'Node': [0, 1, 1], 'children': []}]},
{'Node': [0, 0, 1],
'children': [{'Node': [1, 0, 1], 'children': []},
{'Node': [0, 1, 1], 'children': []},
{'Node': [0, 0, 2], 'children': []}]}]}
def collect_children(nodes):
children=[]
for node in nodes:
if len(node['children'])!=0:
children =node['children']
return children
def get_leaves(nodes, depth):
if depth==0:
return []
elif depth==1:
return collect_children(nodes)
else:
return get_leaves(collect_children(nodes),depth-1)
print(get_leaves([graph],2))