2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 проблемы с памятью
Сообщение07.03.2009, 19:08 


23/12/08
245
Украина
Строится бинарное дерево в свободной памяти, но в процесе может случится нехватка памяти.
Решать эту проблему думаю так: сначала сохраняю все что есть в файл, а потом удаляю дерево, и строю дальше. Так вопрос в том можна ли както освободить все дерево имея только указатель на его корень?
Код:
typedef struct _NODE
{
       int count;
      struct _NODE *Left;
      struct _NODE *Right;
}NODE;

 Профиль  
                  
 
 
Сообщение07.03.2009, 19:22 
Заслуженный участник
Аватара пользователя


01/08/06
3131
Уфа
Конечно! Обратный обход дерева Вас спасёт:
Код:
void freeNode(NODE *Node)
{
  if (Node != NULL)
  {
    freeNode(Node->Left);
    freeNode(Node->Right);
    delete Node;
  }
}

Где-то так.

 Профиль  
                  
 
 
Сообщение07.03.2009, 20:14 


23/12/08
245
Украина
ну... ладно, но я думал есть прямой метод.

 Профиль  
                  
 
 
Сообщение08.03.2009, 20:31 


23/02/09
5
1 По теме уже ответил worm2
2 При сохранении в файл лучше заменить указатели left/right на индексы на эти элементы в файле.
2б Если последующее построение дерева будет логически присоединено к дереву в файле, то можно ввести в структуру(ту что в памяти) элемента дерева ячейку для возможной ссылки на (индекс) элемента-родителя, что записан в файле.

 Профиль  
                  
 
 
Сообщение08.03.2009, 23:55 


23/12/08
245
Украина
хм білобы неплохо если успею то зделаю. Ведь ещо надо отбагать програму и понять как делаются индексы)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group