No wiec tak: mam dwie procedury, jedna z nich:
procedure found(x,y:char; var p:drz; Licznik:integer);}
{* szuka znaku *}
begin
if p<>nil then
begin
found(x,y,p^.lewe,Licznik);
found(x,y,p^.prawe,Licznik);
if p^.klucz=x then inc(znak1);
begin
if p^.lewe=nil then
dodaj(x,y,p^.lewe)
else begin
dodaj(x,y,p^.prawe); pop(Stos) end;
end;
end;
end;
Ze stosu wybieram znak('+-
*''/') i dodaje po nim dany element, jezeli lewa strona jest wolna to dodaje do niej, jezeli druga strona jest wolna to dodaje do niej i usuwam ze stosu element.
Noi w tej procedurze jest taki problem ze jak sie powtarzaja znaki, jak np w rownaniu: (2+3)*4+5 - znak '+' sie powtarza noi juz jest blad, nie wiem jak sobie z nim poradzic wiec zaczolem isc innym tropem:
procedure found(x:char; var p:drz);
begin
if (p <> nil) and (pr(p^.klucz)<>3) then
begin
found(x,p^.lewe);
found(x,p^.prawe);
if p.lewe=nil then dodaj(x,p.lewe)
else if p.prawe=nil then dodaj(x,p.prawe);
end;
end;
Tu za idee przybralem isc caly czas na lewo, a jezeli na lewo jest liczba to na prawo, jezeli na prawo jest liczba to cofamy itd.
moze na obrazku pokaze:
2 2 3 2 3
Ma moze ktos pomysl? ^^