Mam jeszcze jeden problem. Usuwanie poddrzewa wraz z potomkami. Gdy dodaje do potomka jakies rodzenstwo po prawej stronie to jest ok. Usuwa się bez problemu, ale gdy dodam po lewej to program wywala. Procedurę usuwania znalazłem tutaj na forum. wygląda to tak:
procedure usun_poddrzewo(h:Ptag);
begin
if h^.nast<>nil then h^.nast^.pop:=h^.pop;
if h^.pop<>nil then h^.pop^.nast:=h^.nast
else if h^.rod<>nil then h^.rod^.pot:=h^.nast;
while h^.pot<>nil do usun_poddrzewo(h^.pot);
writeln(h^.name);
readln;
Dispose(h);
end;
tak wyglada fragment dodawania na prawa strone:
if s = 1 then begin
if h^.nast=nil then begin
h^.nast:=n;
n^.pop:=h;
end else begin
n^.pop:=h;
n^.nast:=h^.nast;
h^.nast^.pop:=n;
h^.nast:=n;
end;
dodaj_rodzenstwo := 1;
end;
a tak fragment dodawania na lewa strone :
if s = 2 then begin
if h^.pop=nil then begin
h^.pop:=n;
n^.nast:=h;
end else begin
n^.nast:=h;
n^.pop:=h^.pop;
h^.pop^.nast:=n;
h^.pop:=n;
end;
dodaj_rodzenstwo := 2;
end;
jak coś to pop = poprzedni; nast=nastepny; pot=potomek; rod=rodzic :)
Podejrzewam że tu gdzieś musi być błąd. Usuwanie poddrzewa z elementami dodanych na prawą strone jest ok, na lewą już nie :/