Помощь - Поиск - Пользователи - Календарь
Полная версия: Высвобождение памяти занимаемой деревом.
Форум «Всё о Паскале» > 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
Спасибо! Щас буду разбираться!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.