В прошлой статье мы изучили, как выглядят деревья в программировании и как обойти дерево. Для задания дерева достаточно в каждом узле дерева хранить либо список дочерних объектов, либо ссылку на родительский. Если есть что-то одно, то можно найти и второе. У нас уже есть класс Organization (организация), и каждая организация содержит в себе список дочерних Childes: Также у организации есть Id родительской - ParentId. Сейчас он не используется и потому горит серым. Из прошлой статьи у нас также остался пример организаций и код для обхода дерева в OrganizationTreeWalker.Apply(): Сделаем аналогичный обход дерева, но с заполнением ParentId. То есть, по Childes мы будем узнавать ParentId. Назовём метод FillParentId(). Сначала он будет вызываться для корневой организации. Далее он будет проходить по всем дочерним организациям и устанавливать у них ParentId равный Id корневой организации. При этом метод будет вызывать сам себя для каждой корневой организации, чтобы рекурсивно заполнить Parent