[Pascal] Liczba prawych wierzchołków

Humanista123
Użytkownik
Użytkownik
Posty: 54
Rejestracja: 1 sty 2017, o 20:32
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 17 razy

[Pascal] Liczba prawych wierzchołków

Post autor: Humanista123 »

Witajcie, Mam zadanie.

Wierzchołek w drzewie binarnym jest prawy, jeśli jego prawe poddrzewo ma rozmiar nie mniejszy od lewego poddrzewa. Napisz procedurę, która policzy liczbę prawych wierzchołków w drzewie binarnym. Rozmiar drzewa to liczba wierzchołków drzewa.

Typ wskaźnikowy:

Kod: Zaznacz cały

type wsk=^wierzcholek;
wierzcholek=record
klucz:integer;
lewy,prawy,ojciec:wsk
end
Kod:

Kod: Zaznacz cały

procedure prawe (r:wsk; var h,n:integrer)
var 
hl,hp,np,nl:integer;
begin
   if r^.prawe=nil and r^.lewe=nil then h:=1
   else
       begin
       hl:=0; hp:=0; np:=0; nl:=0;
       prawe (r^.prawe, hp, np);
       prawe (r^.lewe, hl, nl);
       h:=hp+hl+1;
       if hp>=hl then n:=nl+np+1 else n:=nl+np;
       end;
end.    
Proszę o sprawdzenie, czy jest to dobrze
karakuku
Użytkownik
Użytkownik
Posty: 226
Rejestracja: 14 sie 2016, o 17:31
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 20 razy
Pomógł: 60 razy

Re: [Pascal] Liczba prawych wierzchołków

Post autor: karakuku »

Jest ok tylko będzie crash gdy r=nil

Zmieniłbym

Kod: Zaznacz cały

if r^.prawe=nil and r^.lewe=nil then h:=1
na

Kod: Zaznacz cały

if r<>nil then h:=0
I zmieniłbym

Kod: Zaznacz cały

prawe (r^.prawe, hp, np);
prawe (r^.lewe, hl, nl);
na

Kod: Zaznacz cały

if r^.prawe<>nil then prawe(r^.prawe, hp, np);
if r^.lewe<>nil then prawe(r^.lewe, hl, nl);
Humanista123
Użytkownik
Użytkownik
Posty: 54
Rejestracja: 1 sty 2017, o 20:32
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 17 razy

Re: [Pascal] Liczba prawych wierzchołków

Post autor: Humanista123 »

Dziękuję bardzo
ODPOWIEDZ