Есть код построения и поиска максимального значения элемента дерева, как удалить дерево для высвобождения памяти ? Написал процедуру удаления, не работает, что не верно ?
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
19.01.2012 3:07
Цитата
Написал процедуру удаления, не работает
То есть, вот это уже слишком просто?
procedure DelTree(var T:TTree); begin if T <> nil then begin DelTree(T^.right); DelTree(T^.left);
Dispose(T); end; end;
Надо сделать как можно сложнее, "чтоб никто не догадался" (С), как оно работает?
GrukhvinEV
19.01.2012 20:30
Ой спасибо! Да я начинающий )))) Сидел вчера весь вечер велосипед изобретал ))))))) А еще вопрос а как проверить удалил ли я все динамические элементы или нет ? Не конкретно в этой программе а вообще.