typedef struct tagTREE
{
char *pFileSearchRecord;
int level;
bool isDir;
tagTREE *left;
tagTREE *right;
} TREE;
TREE* Insert(TREE *root, char *pFileSearchRecord, int level, bool isDir)
{
if (root == NULL)
{
root = new TREE;
root->pFileSearchRecord = pFileSearchRecord;
root->level = level;
root->isDir = isDir;
root->left = root->right = NULL;
}
else
{
root->left = Insert(root->left,pFileSearchRecord,level,isDir);
}
return root;
}
// Рекурсивный обход каталога, с файлами и подкаталогами.
TREE* dirIter(char *dir, TREE *root, int level = 0)
{
// На входе создаем первую запись
char *pSearchRecord=(char*)malloc(strlen(searchPath));
...
root= Insert(root, pSearchRecord, level, true);
//... Здесь реализована функция обхода, все работает
// Если это файл то создаем следующую запись
if(isDir){
char *pFileSearchRecord=(char*)malloc(strlen(pSearchRecord));
...
root= Insert(root, pFileSearchRecord, level, false);
}
// А вот если это каталог, то здесь запускаем рекурсию, для обхода подкаталога
else{
TREE *childsOf = NULL;
childsOf= dirIter(newDirectory, childsOf, level + 1);
// И как теперь сростить root и childsOf ???
}
return root;
}
int main(void)
{
TREE *sourceTree = NULL;
sourceTree = dirIter("\\", sourceTree);
// В sourceTree список файлов каталога в left,
}
Бинарное дерево
структура:
pFileSearchRecord указывает на строку с именем файла или каталога.
level уровень вложенности.
isDir каталог или файл.
left указатель на экземпляр структуры, содержащей следующий элемент каталога.
right вот тут у меня заминка, по идее это должен быть указатель на экземпляр содержащий первый элемент подкаталога.
примерно так:
Код:
Подскажите как childs прикрепить к parents?, чтобы на выходе в sourceTree был правильный древовидный список файлов, каталогов, и подкаталогов.
исходник программы на всякий случай [ATTACH]4994[/ATTACH]