W języku Python 3 dostępny jest standardowy moduł queue. Zapoznaj się z pokazanym kodem, a następnie wykonaj umieszczone pod nim polecenia.
Linia 1. import queue.
Linia 3. class Wezel dwukropek.
Linia 4. def podkreślnik podkreślnik init podkreślnik podkreślnik otwórz nawias okrągły self przecinek lewy znak równości None przecinek prawy znak równości None zamknij nawias okrągły dwukropek.
Linia 5. self kropka lewy znak równości lewy.
Linia 6. self kropka prawy znak równości prawy.
Linia 8. def stworz otwórz nawias okrągły elementy zamknij nawias okrągły dwukropek.
Linia 9. kolejka znak równości queue kropka Queue otwórz nawias okrągły zamknij nawias okrągły.
Linia 10. for element in elementy dwukropek.
Linia 11. wezel znak równości Wezel otwórz nawias okrągły element otwórz nawias kwadratowy 0 zamknij nawias kwadratowy przecinek element otwórz nawias kwadratowy 1 zamknij nawias kwadratowy zamknij nawias okrągły.
Linia 12. kolejka kropka put otwórz nawias okrągły wezel zamknij nawias okrągły.
Linia 13. return kolejka.
Linia 15. elementy znak równości otwórz nawias kwadratowy otwórz nawias okrągły 65 przecinek apostrof A apostrof zamknij nawias okrągły przecinek otwórz nawias okrągły 66 przecinek apostrof B apostrof zamknij nawias okrągły przecinek otwórz nawias okrągły 67 przecinek apostrof C apostrof zamknij nawias okrągły przecinek otwórz nawias okrągły 68 przecinek apostrof D apostrof zamknij nawias okrągły przecinek otwórz nawias okrągły 69 przecinek apostrof E apostrof zamknij nawias okrągły przecinek otwórz nawias okrągły 70 przecinek apostrof F apostrof zamknij nawias okrągły zamknij nawias kwadratowy.
Linia 17. p znak równości stworz otwórz nawias okrągły elementy zamknij nawias okrągły.
Linia 19. kratka wywołania wraz z oczekiwanymi wynikami.
Linia 20. print otwórz nawias okrągły p kropka get otwórz nawias okrągły zamknij nawias okrągły kropka dzieci otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły.
Linia 21. kratka otwórz nawias okrągły 65 przecinek apostrof A apostrof zamknij nawias okrągły.
Linia 22. print otwórz nawias okrągły p kropka get otwórz nawias okrągły zamknij nawias okrągły kropka dzieci otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły.
Linia 23. kratka otwórz nawias okrągły 66 przecinek apostrof B apostrof zamknij nawias okrągły.
Linia 24. print otwórz nawias okrągły p kropka get otwórz nawias okrągły zamknij nawias okrągły kropka dzieci otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły.
Linia 25. kratka otwórz nawias okrągły 67 przecinek apostrof C apostrof zamknij nawias okrągły.
RYigv1hFDBjyj
RJsCpHINi0MEh
21
Ćwiczenie 2
Zdefiniuj klasę class Wezel o następujących polach i metodach:
Pola:
dane – o domyślnej wartości None
lewo – o domyślnej wartości None
prawo – o domyślnej wartości None
Metody:
konstruktor – przypisuje każdemu polu odpowiednie wartości
dunder __str__ – nadpisuje domyślną metodę odpowiedzialną za zwracanie łańcucha znaków odpowiadającego danemu obiektowi; deklarujemy ją w ten sposób: def __str__(self); zaimplementowana metoda powinna zwracać łańcuch znaków f"Wartość = {self.dane}"
dzieci – zwraca łańcuch znaków: f"Dzieci: L -> {self.lewo} P -> {self.prawo}"
Następnie dla każdej krotki zawartej w liście wezly stwórz obiekty klasy Wezel z zawartością pola dane zgodną z pierwszą wartością krotki. Wartościami pól lewo i prawo powinny być nowo utworzone obiekty, których indeks w tablicy wezly odpowiada kolejno drugiej i trzeciej wartości z krotki (None oznacza brak dziecka, a więc wartością pola lewo bądź prawo będzie None).
Przykład 1
Dla listy wezly = [("korzen", None, 1), ("prawo", None, None)] musimy utworzyć węzeł z polami dane o wartości "korzen", lewo zawierające wartość None i prawo zawierające obiekt klasy Wezel, którego dane to "prawo", lewo to None i prawo to None
Specyfikacja problemu:
Dane:
wezly – lista zawierająca krotki z wartościami pól instancji klasy
Wynik:
Na standardowym wyjściu program wypisuje dane dla zadanych węzłów, a następnie ich dzieci.
Swoje rozwiązanie przetestuj dla listy: wezly = [("korzen", 1, 2), ("lewo", None, None), ("prawo", None, None)].
RXWC4qQBwPddz
Linia 1. class Wezel dwukropek.
Linia 2. def podkreślnik podkreślnik init podkreślnik podkreślnik otwórz nawias okrągły self przecinek dane znak równości None przecinek lewo znak równości None przecinek prawo znak równości None zamknij nawias okrągły dwukropek.
Linia 3. self kropka dane znak równości dane.
Linia 4. self kropka lewo znak równości lewo.
Linia 5. self kropka prawo znak równości prawo.
Linia 7. def podkreślnik podkreślnik str podkreślnik podkreślnik otwórz nawias okrągły self zamknij nawias okrągły dwukropek.
Linia 8. return f cudzysłów Wartość znak równości otwórz nawias klamrowy self kropka dane zamknij nawias klamrowy cudzysłów.
Linia 10. def dzieci otwórz nawias okrągły self zamknij nawias okrągły dwukropek.
Linia 11. return f cudzysłów Dzieci dwukropek L minus zamknij nawias ostrokątny otwórz nawias klamrowy self kropka lewo zamknij nawias klamrowy P minus zamknij nawias ostrokątny otwórz nawias klamrowy self kropka prawo zamknij nawias klamrowy cudzysłów.
Linia 13. wezly znak równości otwórz nawias kwadratowy otwórz nawias okrągły cudzysłów korzen cudzysłów przecinek 1 przecinek 2 zamknij nawias okrągły przecinek otwórz nawias okrągły cudzysłów lewo cudzysłów przecinek None przecinek None zamknij nawias okrągły przecinek otwórz nawias okrągły cudzysłów prawo cudzysłów przecinek None przecinek None zamknij nawias okrągły zamknij nawias kwadratowy.
Linia 15. utworzone podkreślnik wezly znak równości otwórz nawias kwadratowy zamknij nawias kwadratowy.
Linia 17. kratka zapisywanie nowych węzłów w tablicy.
Linia 18. for wezel in wezly dwukropek.
Linia 19. utworzone podkreślnik wezly kropka append otwórz nawias okrągły Wezel otwórz nawias okrągły wezel otwórz nawias kwadratowy 0 zamknij nawias kwadratowy zamknij nawias okrągły zamknij nawias okrągły.
Linia 21. kratka dopinanie dzieci do każdego węzła.
Linia 22. for i in range otwórz nawias okrągły len otwórz nawias okrągły wezly zamknij nawias okrągły zamknij nawias okrągły dwukropek.
Linia 23. if wezly otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy is None dwukropek.
Linia 24. utworzone podkreślnik wezly otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka lewo znak równości None.
Linia 25. else dwukropek.
Linia 26. utworzone podkreślnik wezly otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka lewo znak równości utworzone podkreślnik wezly otwórz nawias kwadratowy wezly otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy zamknij nawias kwadratowy.
Linia 27. if wezly otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 2 zamknij nawias kwadratowy is None dwukropek.
Linia 28. utworzone podkreślnik wezly otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka prawo znak równości None.
Linia 29. else dwukropek.
Linia 30. utworzone podkreślnik wezly otwórz nawias kwadratowy i zamknij nawias kwadratowy kropka prawo znak równości utworzone podkreślnik wezly otwórz nawias kwadratowy wezly otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 2 zamknij nawias kwadratowy zamknij nawias kwadratowy.
Linia 32. for wezel in utworzone podkreślnik wezly dwukropek.
Linia 33. print otwórz nawias okrągły wezel zamknij nawias okrągły.
Linia 35. kratka Wartość znak równości korzen.
Linia 36. kratka Wartość znak równości lewo.
Linia 37. kratka Wartość znak równości prawo.
Linia 39. for wezel in utworzone podkreślnik wezly dwukropek.
Linia 40. print otwórz nawias okrągły wezel kropka dzieci otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły.
Linia 42. kratka Dzieci dwukropek L minus zamknij nawias ostrokątny Wartość znak równości lewo P minus zamknij nawias ostrokątny Wartość znak równości prawo.
Linia 43. kratka Dzieci dwukropek L minus zamknij nawias ostrokątny None P minus zamknij nawias ostrokątny None.
Linia 44. kratka Dzieci dwukropek L minus zamknij nawias ostrokątny None P minus zamknij nawias ostrokątny None.
31
Ćwiczenie 3
Korzystając z klasy zaimplementowanej w zadaniu 2, utwórz węzły w ten sam sposób, a następnie zapisz funkcję wedrownik(element) przechodzącą po drzewie binarnym. Powinna ona działać rekurencyjnie według następującego algorytmu:
jeśli wywoływany element jest wartością None, funkcja kończy działanie;
w pozostałych przypadkach funkcja wyświetla wartość zawartą w węźle, a następnie rekurencyjnie wywołuje się dla elementów najpierw lewego, a potem prawego.
Specyfikacja problemu:
Dane:
wezly – lista zawierająca krotki z wartościami pól instancji klasy
Wynik:
Na standardowym wyjściu program wypisuje dane wszystkich węzłów, po których przeszedł za pomocą funkcji wedrownik().