def split_tree(tree, level=0):
for name, branch in tree.items():
if branch:
paths = split_tree(branch, level - 1)
if level > 0:
yield from ([name, *path] for path in paths)
else:
yield [name, [node for path in paths for node in path]]
else:
yield [name]
tree = {
'ROOT': {
'B': {
'E': {},
'F': {}
},
'C': {},
'D': {
'H': {},
'I': {
'J': {},
'K': {}
}
}
}
}
print(*split_tree(tree, 1), sep='\n')
print()
print(*split_tree(tree, 2), sep='\n')
ZGVmIHNwbGl0X3RyZWUodHJlZSwgbGV2ZWw9MCk6CiAgICBmb3IgbmFtZSwgYnJhbmNoIGluIHRyZWUuaXRlbXMoKToKICAgICAgICBpZiBicmFuY2g6CiAgICAgICAgICAgIHBhdGhzID0gc3BsaXRfdHJlZShicmFuY2gsIGxldmVsIC0gMSkKICAgICAgICAgICAgaWYgbGV2ZWwgPiAwOgogICAgICAgICAgICAgICAgeWllbGQgZnJvbSAoW25hbWUsICpwYXRoXSBmb3IgcGF0aCBpbiBwYXRocykKICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgIHlpZWxkIFtuYW1lLCBbbm9kZSBmb3IgcGF0aCBpbiBwYXRocyBmb3Igbm9kZSBpbiBwYXRoXV0KICAgICAgICBlbHNlOgogICAgICAgICAgICB5aWVsZCBbbmFtZV0KCnRyZWUgPSB7CiAgICAnUk9PVCc6IHsKICAgICAgICAnQic6IHsKICAgICAgICAgICAgJ0UnOiB7fSwKICAgICAgICAgICAgJ0YnOiB7fQogICAgICAgIH0sCiAgICAgICAgJ0MnOiB7fSwKICAgICAgICAnRCc6IHsKICAgICAgICAgICAgJ0gnOiB7fSwKICAgICAgICAgICAgJ0knOiB7CiAgICAgICAgICAgICAgICAnSic6IHt9LAogICAgICAgICAgICAgICAgJ0snOiB7fQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CnByaW50KCpzcGxpdF90cmVlKHRyZWUsIDEpLCBzZXA9J1xuJykKcHJpbnQoKQpwcmludCgqc3BsaXRfdHJlZSh0cmVlLCAyKSwgc2VwPSdcbicp
['ROOT', 'B', ['E', 'F']]
['ROOT', 'C']
['ROOT', 'D', ['H', 'I', ['J', 'K']]]
['ROOT', 'B', 'E']
['ROOT', 'B', 'F']
['ROOT', 'C']
['ROOT', 'D', 'H']
['ROOT', 'D', 'I', ['J', 'K']]