Du kannst dazu die Funktionen aus dirent.h benutzen: opendir, readdir und closedir.
Sprich: Du laeufst das Verzeichnis durch, und wenn die Datei wiederum ein Verzeichnis ist (laesst sich z.B. mit stat() herausfinden), dann fuegst du das Verzeichnis ans Ende der Liste (ein Array ist hier nicht gerade die Beste Loesung) und rufst die Funktion rekursiv auf, die dann dieses Verzeichnis durchlaeuft.