Metody programowania / Ćwiczenia 3: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
m pimpek
Pch (dyskusja | edycje)
Linia 292: Linia 292:
     pierwsza, dobrze: boolean;
     pierwsza, dobrze: boolean;
  '''procedure''' Obejdź(d: drzewo):   
  '''procedure''' Obejdź(d: drzewo):   
  //Obejdź obchodzi d infiksowo; jeśli d jest liściem to porównuje d^.w z wartością z poprzedniego liścia
  //Obejdź obchodzi d infiksowo; dla kazdego węzła d, poównujemy d^.w z ostatnio odwiedzoną wartością
  //która mamy zapamiętaną w zmiennej globalnej ost
  //obiegu infiksowego, którą mamy zapamiętaną w zmiennej globalnej ost.
  //Wyjątkiem jest sytuacja gdy pierwsza=true, czyli gdy nie mamy jeszcze zapamiętanej żadnej wartości
  //Wyjątkiem jest sytuacja gdy pierwsza=true, czyli gdy nie mamy jeszcze zapamiętanej żadnej wartości
  //dobrze oznacza że dotychczas odwiedzone liście tworzą ciąg rosnący
  //dobrze oznacza że dotychczas odwiedzone węzły tworzą ciąg rosnący
  '''begin'''
  '''begin'''
   '''if''' dobrze '''and''' d <> nil '''then'''
   '''if''' dobrze '''and''' (d <> nil) '''then'''
    '''if''' d^.lsyn = nil '''and''' d^.psyn = nil '''then'''  
       '''if''' pierwsza '''then''' '''begin'''
       '''if''' pierwsza '''then''' '''begin'''
         pierwsza:=false;
         pierwsza:=false;
         ost:=d^.w;
         ost:=d^.w;  
       '''end'''
       '''end'''
      '''else'''
        dobrze:=(ost < d^.w);
     '''else''' '''begin'''
     '''else''' '''begin'''
       Obejdź(d^.lsyn);
       Obejdź(d^.lsyn);
      dobrze:=(ost < d^.w);
      ost:=d^.w;
       Obejdź(d^.psyn);  
       Obejdź(d^.psyn);  
     '''end;     
     '''end;     

Wersja z 18:47, 20 sty 2008

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 1

{{{3}}}

Zadanie 2 (Odbicie lustrzane)

Napisz procedurę przekształcającą zadane drzewo w jego odbicie lustrzane.

Rozwiązanie 1

{{{3}}}

Zadanie 3 (Izomorfizm drzew)

Napisz funkcję sprawdzającą czy dwa zadane drzewa są izomorficzne (mają taki sam kształt).

Rozwiązanie 1

{{{3}}}

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 1

{{{3}}}

Rozwiązanie 1

{{{3}}}

Zadanie 5 (Szerokość drzewa)

Napisz funkcję obliczającą szerokość drzewa, czyli maksymalną liczbę wierzchołków na jednym poziomie.

Wskazówka 1

{{{3}}}

Rozwiązanie 1

{{{3}}}

Zadanie 6 (Średnica drzewa)

Napisz funkcję obliczającą średnicę drzewa. Średnica to maksymalna odległość między dwoma wierzchołkami.

Wskazówka 1

{{{3}}}

Rozwiązanie 1

{{{3}}}

Zadanie 7 (Sprawdzanie czy drzewo jest BST)

Napisz funkcję sprawdzającą czy drzewo jest drzewem BST.

Wskazówka 1

{{{3}}}

Rozwiązanie 1

{{{3}}}


Wskazówka 2

{{{3}}}

Rozwiązanie 2

{{{3}}}