У меня есть следующая древовидная структура
КРАСНЫЙ означает, что узел является каталогом
СИНИЙ означает, что узел является Файл
Я реализовал это дерево, используя 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
) мы возвращаемся (то есть мы не нашли файл).
Для остальной части алгоритма я попытался реализовать его со стеком, где каждый уровень стека предназначен для родителя, представляющего «глубина» поиска, но я понял, что с помощью этого метода у меня все еще есть много других раскрытых случаев.