В языке 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