Implementacja drzew lewicowych (4 pkt.) (C) ------------------------------------------- Termin opublikowania: tydzien 28.05 - 1.06.2001 Termin oddania: tydzien 11.06 - 15.06.2001 Zaimplementuj drzewa lewicowe (w taki sposob w jaki byly omowione na wykladzie ASD). W tym celu zaprojektuj strukture reprezentujaca wezel drzewa lewicowego. Moze ona wygladac na przyklad tak: struct wezel{ int klucz; /* klucz po ktorym porownywane sa wezly */ /* Byc moze jakies dodatkowe dane */ int prawa; /* dlugosc skrajnie prawej sciezki */ struct wezel *lewy, *prawy; /* lewy i prawy syn */ struct wezel *ojciec; } Nastepnie zaprogramuj nastepujace operacje: struct wezel *lacz( struct wezel *d1, struct wezel *d2); void wstaw( struct wezel **d, int klucz, /*dodatkowe dane*/); /*dane z wezla */ najwiekszy(struct wezel **d); /* usuwa najwiekszy el */ Sam musisz zdecydowac czym beda "dodatkowe dane" i czy w ogole beda potrzebne . Zwroc uwage na uzycie wskaznika na wskaznik w funkcjach wstaw i najwiekszy. Czemu ono sluzy? Uzyj drzew lewicowych do rozwiazania nastepujacego problemu. Uzytkownik wprowadza liczbe k. Nastepnie powtarzamy nastepujace cykl az uzytkownik zadeklaruje chec zakonczenia pracy: (1) Uzytkownik wprowadza liczby (wprowadzenie zera konczy wprowadzanie liczb) (2) Program wstawia liczby do drzewa lewicowego (3) Program wypisuje k najwiekszych liczb z drzewa lewicowego usuwajac je. Np jesli uzytkownik wpisuje kolejno: 2 6 3 7 3 0 1 9 2 3 5 0 . . . to program odpowiada: 7 6 9 5 . . .