Zadanie na laboratorium 13: Proszę wpierw stworzyć prosty interfejs dla niezmienialnych zbiorów z parametryzowany typem przechowywanych elementów T. Taki zbiór powinien mieć metody: - sprawdzania, czy jakiś element jest w zbiorze; - wielkość, niepustość zbioru; - dodanie i odjęcie elementu do/ze zbioru: w tym wypadku, powinien zostać zwrócony *nowy* obiekt reprezentujący powiększony/zmniejszony zbiór, podczas gdy poprzedni obiekt powinien być nadal w pełni funkcjonalny. Ponadto, interfejs powinien rozszerzać interfejs Iterable tak, by można było tworzyć iteratory do tego zbioru. Następnie stwórz implementację tego interfejsu dla typów T implements Comparable przy pomocy drzewa BST. Metody dodawania i odejmowania powinny przebudowywać ścieżkę od korzenia do właściwego wierzchołka (dodanego, przestawionego, etc.), zaś poboczne drzewa mają pozostać nieruszone. Iterator powinien się iterować cały czas po tym samym zbiorze. Wskazówka: iterator może trzymać w sobie więcej niż tylko wierzchołek, w którym się obecnie znajduje, żeby wiedział, w jakim kontekście iterowania przez zbiór jesteśmy.