2014 dxdy logo

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

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




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

 
 
 
 
Сообщение07.03.2009, 19:22 
Аватара пользователя
Конечно! Обратный обход дерева Вас спасёт:
Код:
void freeNode(NODE *Node)
{
  if (Node != NULL)
  {
    freeNode(Node->Left);
    freeNode(Node->Right);
    delete Node;
  }
}

Где-то так.

 
 
 
 
Сообщение07.03.2009, 20:14 
ну... ладно, но я думал есть прямой метод.

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

 
 
 
 
Сообщение08.03.2009, 23:55 
хм білобы неплохо если успею то зделаю. Ведь ещо надо отбагать програму и понять как делаются индексы)

 
 
 [ Сообщений: 5 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group