**Termin zajęć:** 24/25.04.2012 ====== Listy i drzewa BST ====== ===== Do przygotowania ===== - Znajomość budowy i zasad działania podstawowych struktur danych: * lista jedno- i dwukierunkowa * drzewo BST - Zakres wiadomości: Cormen - Wprowadzenie do algorytmów - omawiana tematyka - Każdy powinien przynieść na zajęcia zaimplementowane szkielety następujących struktur (struct, not class) - lista jednokierunkowa - lista dwukierunkowa - drzewo binarne BST ===== Dodatek ===== **Struktury w postaci klas:** Przykładowy szkielet klasy listy dwukierunkowej: typedef ElementType int; // typ elementu na liście class ListNode { public: ElementType value; ListNode *prev, *next; ListNode(){ prev = NULL; next = NULL; } }; class List{ private: ListNode *head, *tail; public: List(){ head = tail = NULL; } //poniższe metody należy zaimplementować samodzielnie ~List(); // należy zdefiniować tak, aby usuwał wszystkie elementy ElementType getValue(int index); void setValue(const ElementType& element); void insert(int index, ElementType value); bool remove(int index); bool remove(ElementType value); ListNode* search(ElementType value); }; Szkielet klas węzła drzewa i samego drzewa (rodzica danego węzła można zrealizować jako pole klasy ''TreeNode'' lub wskaźnik na niego pozyskiwać za pomocą odpowiedniej metody ''parent(TreeNode x)'' klasy TreeBST): class TreeNode { public: ElementType key; TreeNode *left, *right, *parent; }; class TreeBST{ private: TreeNode * root; public: TreeBST(); ~TreeBST(); TreeNode* search(ElementType key); // wyszukaj element o kluczu ''key'' w drzewie bool insert(ElementType key); // wstaw element o kluczu ''key'' do drzewa bool remove(ElementType key); // usuń element o kluczu ''key'' z drzewa bool member(ElementType key); // sprawdź czy element o kluczu ''key'' należy do drzewa };