В языке Python для этой задачи есть очень удобные для этого структуры — словари и множества.
Будем хранить два словаря —
parents
и children
.
В каждом словаре в качестве ключей будут участвовать все вершины дерева и только они.
Пусть A
— некоторая вершина.
Тогда parents[A]
— это предок этой вершины, либо None
для корня.
А children[A]
— это множество всех потомков этой вершины.
Также корень дерева будем хранить в переменной root
.
Например, дерево с картинок выше будем хранить так:
root = 'Jake'
children = {'Jake': {'Alice', 'Caitlin'},
'Alice': {'Adam', 'Grace', 'Jay', 'Sean'},
'Caitlin': {'Ben'},
'Adam': set(),
'Grace': {'Luca'},
'Jay': set(),
'Sean': set(),
'Ben': {'Megan', 'Eva', 'Harry'},
'Megan': set(),
'Eva': set(),
'Harry': set(),
'Luca': set(),
}
parents = {'Jake': None,
'Alice': 'Jake',
'Caitlin': 'Jake',
'Adam': 'Alice',
'Grace': 'Alice',
'Jay': 'Alice',
'Sean': 'Alice',
'Ben': 'Caitlin',
'Eva': 'Ben',
'Harry': 'Ben',
'Megan': 'Ben',
'Luca': 'Grace',
}
Такой способ хранения, вообще говоря, избыточен.
По словарю children
можно восстановить словарь parents
и наоборот.
И по любому из этих словарей можно найти корень.
Однако он достаточно удобен.Последнее изменение: Суббота, 15 Август 2020, 02:35