Структура, которую вы описали, не является деревом, это ориентированный граф. Так как это подходит для иерархического рисования , у вас может возникнуть соблазн думать о нем как о дереве (которое само является ациклическим связным графом).
Типичные алгоритмы обхода для графиков: в глубину и в ширину . Реализация графа отличается только тем, что записывает уже посещенные узлы, чтобы избежать посещения определенных узлов несколько раз. Однако, если ваша структура данных гарантирует, что она ациклична, вы можете использовать древовидные алгоритмы на вашем графе, просто рассматривая «родителей» как «детей».
Я сделал простой набросок, чтобы проиллюстрировать, что я имею в виду (отличный шанс попробовать новую функцию рисования в Документах Google):
Как видите, любой граф, имеющий ациклическую направленную форму, можно рассматривать как дерево и применять к нему древовидные алгоритмы. Как только вы не можете гарантировать это свойство, вам придется использовать алгоритмы выделенного графа.