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 .
Przerobić wstawianie do drzew AVL tak by było "funkcjonalne", tzn. żeby nie modyfikowało oryginalnego drzewa.
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).
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ą.
Uzupełnić podany w rozdziale 13 podręcznika Think CS szkic procedury sortowania przez łączenie (mergesort).
"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.