nie wiem czy jakos ci pomoge, ale w C++ robilem cos podobnego ...
jezeli kazdy katalog to obiekt, a wszystkie obiekty sa ulozone w liscie to jednym z pol takiego obiektu moze byc wskaznik do ojca, kiedy katalog glowny to ten wskaznik bedzie np. pusty.
przeszukiwanie zarowno w jedna strone jak i druga jest proste ...
od katalogu glownego rozwijasz rekurencyjnie wszystko co ma wskaznik katalogu glownego, a od strony dolu to tylko wybieranie kolejnych obiektow bo adresy juz bedziesz mial
z gory mowie, ze nie mam pojecia czy to jest optymalne i wogole, lae na pewno nie trudne do zrealizowania i to jest czysta implementacja w C++, bez baz danych
a jesli interesuje cie samo podejscie do drzewek to jest na php.pl artykul o tym lub tez inne rozwiazanie w samej bazie danych: dodatkowa tabela z samymi polaczeniami od kogo do kogo