W programie powinno być jasno ilustrowane działanie poszczególnych funkcji przy użyciu graficznego obrazu drzewa oraz komentarzy wypisywanych na ekran.
Proszę zadeklarować strukturę wezel o trzech polach – dana i dwa wskaźniki do struktury wezel. (Zadania można rozwiązać używając klasy.)
Z.1. (0,5 pkt.) Napisać funkcję void dodaj (int a, wezel *t),
która dodaje do drzewa o korzeniu wskazywanym przez t węzeł z daną a według reguły tworzenia BST.
Z.2. (0,5 pkt.) Napisać funkcję void inorder (wezel *t),
która wypisuje na ekranie dane przechowywane w drzewie o korzeniu wskazywanym przez t przechodząc je w porządku inorder.
Z.3. (0,5 pkt.) Napisać funkcję void rysuj(wezel *t, int h),
która przedstawia na ekranie dane przechowywane w drzewie o korzeniu wskazywanym przez t graficznie odzwierciedlając jego strukturę; rysowanie odbywa się rekurencyjnie, węzły odczytywane są w porządku inorder od prawej do lewej; h oznacza „głębokość” na której znajduje się dany węzeł; na ekranie widzimy drzewo „przewrócone” z pustymi łączami zaznaczonymi przez 0.
Zamiast:
6 3 7 2 4
mamy
0 7
0 6
0 4
0 3
0 2
0 Z.4. (0,5 pkt.) Napisać funkcję int licz (wezel *t),
która zwraca ilość węzłów w drzewie.
Z.5. (0,5 pkt.) Napisać funkcję int min (wezel*t),
która zwraca wartość minimalnego elementu w drzewie.
Z.6. (0,5 pkt.)Wysokością drzewa nazwiemy "ilość pięter" między korzeniem a najdalszym liściem. (np. drzewo z jednego węzła ma wysokość 0).
Napisać funkcję
int wys (wezel *t) która jako argument przyjmuje wskaźnik do korzenia drzewa, a zwraca jego wysokość .
Z.7. (1 pkt) Napisać funkcję
int usun (wezel*t), która usuwa przez kopiowanie węzeł wskazywany przez t i zwraca przechowywaną w nim daną.
Z.8. (2 pkt.) Napisać funkcję
void ukos(wezel*t, int a), która sprawdza, czy w drzewie wskazywanym przez t jest element o wartości a; jeśli tak - wykonuje ukosowanie do korzenia, jeśli nie - dodaje go do drzewa i wykonuje ukosowanie do korzenia. ( można zmodyfikować używaną strukturę węzła, dodając wskaźnik do ojca).