devi crearti un sistema non ricorsivo
ti posto il codice che ad esempio uso per percorrere un'albero di cartelle partendo da un percorso
codice:
ArrayList directories = new ArrayList();
directories.Add(pathToBackup.Path);
while(directories.Count > 0)
{
string directory = (string)directories[0];
directories.RemoveAt(0);
backupRowControl.ProgressText = Path.GetFileName(directory);
Application.DoEvents();
try
{
foreach(string path in Directory.GetFiles(directory))
{
filesToBackup.Add(path);
}
foreach(string path in Directory.GetDirectories(directory))
{
directories.Add(path);
}
}
catch(Exception)
{
// do nothing
}
}
come vedi in pratica creo un'elenco dal quale ad ogni ciclo prelevo un elemento
nel caso specifico a te serve anche sapere dove andare ad inserire questi elementi quindi invece di aggiungere una stringa aggiungi una classe che ti crei dove ci sta l'oggeto figlio ed il relativo oggetto padre (o se i dati che estrai sono già strutturati cosi inserisci direttamente quelli, tanto è tutto per riferimento non viene duplicato nulla)