Вот пример, который использует вашу структуру данных и создает пути к каждому конечному узлу. Чтобы было интересно, я выбрал путь, состоящий из имен узлов. Путь также может быть номерами узлов. Я не уверен, почему у дочернего узла будет номер, но он еще не существует, поэтому в моем примере предполагается, что если запись дочернего узла не равна нулю, то узел существует:
from pprint import pprint
btree = {
1: ["Node 1", 2, 3],
2: ["Node 2", 4, 0],
3: ["Node 3", 0, 0],
4: ["Node 4", 5, 0],
5: ["Node 5", 6, 0],
6: ["Node 6", 7, 0],
7: ["Node 7", 0, 0],
}
def do_node(id, path, result):
node = btree[id]
if node[1] == 0 and node[2] == 0:
# This node has no children, and is thus a leaf node, so add it to the result list
result.append(path + [node[0]])
else:
# This is a non-leaf node, so process its children
if node[1] != 0:
do_node(node[1], path + [node[0]], result)
if node[2] != 0:
do_node(node[2], path + [node[0]], result)
def print_leaf_paths(tree):
result = []
do_node(1, [], result)
pprint(result)
print_leaf_paths(btree)
В образце дерева есть два листовых узла, один сразу и один на 5 уровней. Результат:
[['Node 1', 'Node 2', 'Node 4', 'Node 5', 'Node 6', 'Node 7'],
['Node 1', 'Node 3']]