Metody Programowania - Lista 8


Zadanie 1

Napisać procedurę "funkcjonalego" usuwania elementu z drzewa. Tzn. funkcja to ma zwracać nowe drzewo w którym dany element już nie występuje i które współdzieli większość węzłów ze starym drzewem. Funkcja nie ma modyfikować starego drzewa.

Uwaga: Jest to podobne do przykładu drzewo2.p .

Zadanie 2

Przerobić wstawianie do drzew AVL tak by było "funkcjonalne", tzn. żeby nie modyfikowało oryginalnego drzewa.

Zadanie 3

Napisać szybszą procedurę sprawdzania czy dane drzewo jest drzewem AVL (procedura w pragramie przykładowym wykonuje wielokrotne przejścia po drzewie -- wykonać sprawdzenie w jednym przejściu).

Zadanie 4

Z podręcznika Think CS rozdział 12 zapoznać się z procedurą wyszukiwania binarnego find_bisect. Znaleźć (podać) warunek który jest zachowywany przy wywołanich rekursywnych (niezmiennik) i który pozwala uzasadnić że find_bisect działa poprawnie.

Przerobić find_bisect, tak by otrzymać procedurę iteracyjną.

Zadanie 5

Uzupełnić podany w rozdziale 13 podręcznika Think CS szkic procedury sortowania przez łączenie (mergesort).

Zadanie 6

"Przepisać" na C procedurę funkcjonalnego wstawiania do drzewa. Dokładniej, założyć że klucze są liczbami całkowitymi i zadeklarować jako typ węzła odpowiednią strukturę z dwoma wskaźnikami na potomki -- wersja w C ma działać na drzewach zbudowanych z takich węzłów.