Metody programowania / Ćwiczenia 3: Różnice pomiędzy wersjami
| Linia 146: | Linia 146: | ||
==Zadanie 5 (Szerokość drzewa)== | ==Zadanie 5 (Szerokość drzewa)== | ||
Napisz funkcję obliczającą szerokość drzewa, czyli maksymalną liczbę wierzchołków na jednym poziomie. | Napisz funkcję obliczającą szerokość drzewa, czyli maksymalną liczbę wierzchołków na jednym poziomie. | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Wskazówka</span> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
Najłatwiej to zrobić obchodząc drzewo wszerz; ale taniej jest gdy dla każdego poziomu będziemy pamiętać dotychczas odwiedzoną liczbę wierzchołków na tym poziomie. Do tego celu potrzebna jest lista. | Najłatwiej to zrobić obchodząc drzewo wszerz; ale taniej jest gdy dla każdego poziomu będziemy pamiętać dotychczas odwiedzoną liczbę wierzchołków na tym poziomie. Do tego celu potrzebna jest lista. | ||
</div> | </div> | ||
</div> | </div> | ||
<div class="mw-collapsible mw-made=collapsible mw-collapsed"> | |||
<span class="mw-collapsible-toogle mw-collapsible-toogle-default style="font-variant:small-caps">Rozwiązanie</span> | |||
<div class="mw-collapsible-content" style="display:none"> | |||
'''function''' Szerokość(d: drzewo): integer; | '''function''' Szerokość(d: drzewo): integer; | ||
//Oblicza maksymalną liczbę wierzchołków na jednym poziomie drzewa d | //Oblicza maksymalną liczbę wierzchołków na jednym poziomie drzewa d | ||
| Linia 187: | Linia 189: | ||
''Koszt pamięciowy:'' liniowy ze względu na wysokość drzewa | ''Koszt pamięciowy:'' liniowy ze względu na wysokość drzewa | ||
</div> | </div> | ||
</div> | </div> | ||
==Zadanie 6 (Średnica drzewa)== | ==Zadanie 6 (Średnica drzewa)== | ||
Wersja z 21:55, 28 maj 2020
To są zadania na drzewa.
Oglądaj wskazówki i rozwiązania __SHOWALL__
Ukryj wskazówki i rozwiązania __HIDEALL__
Przyjmujemy następujące definicje:
type el_drzewa = record
w: integer;
lsyn, psyn: ^el_drzewa;
end;
drzewo = ^el_drzewa;
Zadanie 1 (Liczba liści w drzewie)
Napisz funkcję która oblicza liczbę liści w drzewie.
Rozwiązanie
Zadanie 2 (Odbicie lustrzane)
Napisz procedurę przekształcającą zadane drzewo w jego odbicie lustrzane.
Rozwiązanie
Zadanie 3 (Izomorfizm drzew)
Napisz funkcję sprawdzającą czy dwa zadane drzewa są izomorficzne (mają taki sam kształt).
Rozwiązanie
Zadanie 4 (Lista liści)
Napisz funkcję wiążącą liście drzewa w listę (od lewej do prawej). Wynikiem funkcji ma być wskaźnik do utworzonej listy. Zakładamy, że każdy węzeł ma dodatkowe pole będące wskaźnikiem do węzła, czyli używamy typów
type węzeł = record
w: integer;
lsyn, psyn, nast: ^węzeł;
end;
drzewoL = ^węzeł;
Wskazówka
Rozwiązanie
Zadanie 5 (Szerokość drzewa)
Napisz funkcję obliczającą szerokość drzewa, czyli maksymalną liczbę wierzchołków na jednym poziomie.
Wskazówka
Rozwiązanie
Zadanie 6 (Średnica drzewa)
Napisz funkcję obliczającą średnicę drzewa. Średnica to maksymalna odległość między dwoma wierzchołkami.
Wskazówka 1
Rozwiązanie 1
Zadanie 7 (Sprawdzanie czy drzewo jest BST)
Napisz funkcję sprawdzającą czy drzewo jest drzewem BST.
Wskazówka 1
Rozwiązanie 1
Wskazówka 2
Rozwiązanie 2