Алгоритм печати пути к указанному c узлу в дереве (PHP) - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть следующая древовидная структура

enter image description here

КРАСНЫЙ означает, что узел является каталогом

СИНИЙ означает, что узел является Файл

Я реализовал это дерево, используя 2 класса: NodeParent и NodeChild. NodeParent имеет массив всех дочерних узлов ($ children) и массив всех родительских узлов ($ subParents). Мне нужно написать рекурсивную функцию для просмотра дерева, и когда мы найдем искомый узел, мне нужно:

  • Если это дочерний узел, запишите путь из Root (в этом случае Do c) к нему. например, find (1) возвращает Doc/IMG/1
  • Если это родительский узел, запишите путь из Root и все пути для его дочерних элементов, а также родителей и дочерних элементов родителей ... например, find (Works ) возвращает:
 Doc/Works
 Doc/Works/Lett
 Doc/Works/ACC
 Doc/Works/Acc/Rep
 Doc/Works/Acc/Acc

Моя попытка: у рекурсивной функции до l oop через заданное дерево будет базовый случай: когда у нас больше нет дочерних родителей (то есть empty($parent->getSubParents) == true) мы возвращаемся (то есть мы не нашли файл).

Для остальной части алгоритма я попытался реализовать его со стеком, где каждый уровень стека предназначен для родителя, представляющего «глубина» поиска, но я понял, что с помощью этого метода у меня все еще есть много других раскрытых случаев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...