Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Бинарное дерево

67K
22 марта 2011 года
commeta
3 / / 11.03.2011
Создаю дерево из структур для хранения списка файлов и каталогов.

структура:
pFileSearchRecord указывает на строку с именем файла или каталога.
level уровень вложенности.
isDir каталог или файл.
left указатель на экземпляр структуры, содержащей следующий элемент каталога.
right вот тут у меня заминка, по идее это должен быть указатель на экземпляр содержащий первый элемент подкаталога.

примерно так:
Код:
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,
}


Подскажите как childs прикрепить к parents?, чтобы на выходе в sourceTree был правильный древовидный список файлов, каталогов, и подкаталогов.

исходник программы на всякий случай [ATTACH]4994[/ATTACH]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог