Zadanie 1) Które z poniższych drzew są zrównoważone (w sensie definicji drzew AVL): 1) 2) 3) a a a / \ / / \ / \ / / \ b d b b c / / \ / \ c c d d e \ f (litery reprezenują węzły, kreski ukośne połączenia). Zadanie 2) Mamy następujące deklaracje struktur: struct { char c1; long l; char c2; short s;} st1; struct { long l; short s; char c1; char c2;} st2; ile zajmują one miejsca zakładając 2-bajtowe short i 4-bajtowe int i long oraz rozmieszczenie wyrównnane (tzn, gdy liczby są rozmieszczane pod adresami podzielnymi przez ich wielkość). Zadanie 3) Węzły listy mają pola reprezentujące klucz (będący liczbą całkowitą) i wartość. Listy przechowujemy tak by pola klucza były uporządkowane rosnąco. Napisać procedurę która mając dane klucz i wartość wykona wstawienie na listę. Dokładniej, procedura ma wyprodukować nową listę (kopiując węzły starej). Jeśli na starej liście był węzeł z danym kluczem to należy go pominąć (oczywiście w obu przypadkach dodamy nowy węzeł). Procedura na wykonać na najwyżej jedno przejście po liscie, nie ma zmieniać oryginalnej listy i nie ma używać zmiennych globalnych. Zadanie 4) Mamy drzewo binarne którego węzły mają pole przechowujące wartość. Napisać procedurę której ma dwa argumenty: drzewo d i funkcję jednoargumentową f. Procedura ta ma wyprodukować nowe drzewo, będące przekształceniem starego. Dokładniej, ma ona zamienić miejscami lewe poddrzewo z prawym, o ile wywołanie funkcji f (z argumentem będącym wartością węzła) do wartość prawdziwą. W przeciwnym razie kolejność węzłów pozostawia się bez zmian. Procedura ma wykonać tylko jedno przejście po drzewie i nie ma zmieniać oryginalnego drzewa.