Помощь - Поиск - Пользователи - Календарь
Полная версия: Высвобождение памяти занимаемой деревом.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
GrukhvinEV
Есть код построения и поиска максимального значения элемента дерева, как удалить дерево для высвобождения памяти ? Написал процедуру удаления, не работает, что не верно ?
Program Lab_6;
uses crt;
type
 TTree=^Tnode;
 Tnode=record
 inf:integer;
 left,right:TTree;
 end;
procedure Search_Max(var T:TTree;var elem:integer);
 begin
  if T<>nil
   then
    begin
     if T^.inf>elem
      then
       elem:=T^.inf;
       Search_Max(T^.right,elem);
       Search_Max(T^.left,elem);
    end;
 end;
procedure RandomFillTree(var node:TTree; var nodes:integer);
var
 left,right:integer;
begin
 if nodes=0
  then
   exit;
 left:=random(nodes);
 right:=nodes-left-1;
 new(node);
 node^.inf:=random(1000);
 writeln(' nodes:', nodes,' left:', left,' right:', right,' inf:', node^.inf);
 node^.left:=nil;
 node^.right:=nil;
 RandomFillTree(node^.left, left);
 RandomFillTree(node^.right, right);
 end;
 procedure DelTree(var T:TTree; const M:TTree);
 begin
       if (T^.left=nil) and (T^.right=nil)
       then  begin
                  dispose(T);
                  T:=M;
                  if T<>nil then
                  DelTree(T,M);
             end
       else begin if T^.left<>nil then DelTree(T^.left,M);
                  if T^.right<>nil then DelTree(T^.right,M);
            end;
 end;
var
 T:TTree;
 Max,total_nodes:integer;
begin
 clrscr;
 writeln('Введите количество элементов дерева:');
 readln(total_nodes);
 RandomFillTree(T, total_nodes);
 Search_Max(T, Max);
 writeln;
 writeln('Max= ', max);
 writeln(T^.inf);
 DelTree(T,T);
 readln;
end.
IUnknown
Цитата
Написал процедуру удаления, не работает
То есть, вот это уже слишком просто?
procedure DelTree(var T:TTree);
begin
   if T <> nil then
   begin
      DelTree(T^.right);
      DelTree(T^.left);

      Dispose(T);
   end;
end;


Надо сделать как можно сложнее, "чтоб никто не догадался" (С), как оно работает?
GrukhvinEV
Ой спасибо! Да я начинающий )))) Сидел вчера весь вечер велосипед изобретал ))))))) А еще вопрос а как проверить удалил ли я все динамические элементы или нет ? Не конкретно в этой программе а вообще.
IUnknown
Вообще - использовать нормальный компилятор:

FPC 2.6.0 с ключом -gh выдает:
Неправильно реализованное удаление (Показать/Скрыть)


Правильное удаление (Показать/Скрыть)
GrukhvinEV
Спасибо! Щас буду разбираться!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.