Drzewo binarne BST LABORKA Piotr Ciskowski
zadanie 1. drzewo binarne - 1 Zaimplementuj drzewo binarne w postaci: klasy Osoba przechowującej prywatne zmienne: liczbę całkowitą to będzie klucz, wg którego będziemy potem wstawiać, usuwać, wyszukiwać elementy w drzewie imię osoby klasy Wierzcholek przechowującej: wskaźnik do obiektu klasy Osoba wskaźnik do lewego poddrzewa wskaźnik do prawego poddrzewa dla wygody niech one będą publiczne klasy Drzewo przechowującej: wskaźnik do korzenia - prywatny
zadanie 1. drzewo binarne - 2 Zaimplementuj niezbędne metody w klasie Osoba: konstruktor / destruktor metody dostępowe dla pól Zaimplementuj niezbędne funkcje klasy Wierzcholek: konstruktor destruktor funkcję zwracającą dane przechowywane w wierzchołku - jako tekst: liczbę (klucz), a za nią imię w nawiasie Zaimplementuj konstruktor drzewa ustawiający korzeń na NULL
zadanie 1. drzewo binarne - 3 W klasie Drzewo zaimplementuj funkcję wyszukującą wierzchołek z obiektem o podanym kluczu: jako parametr przyjmuje wartość klucza (int) zwraca wskaźnik na znaleziony wierzchołek lub NULL wykonuje wyszukiwanie binarne po znalezieniu wierzchołka o podanym kluczu funkcja main będzie mogła wyświetlić nie tylko klucz, ale też inne dane, u nas: imię osoby siedzącej na danym wierzchołku
zadanie 1. drzewo binarne - 4 W klasie Drzewo zaimplementuj funkcję wstawiającą wierzchołek z obiektem o podanym kluczu i imieniu: jako parametr przyjmuje wartość klucza (int) oraz łańcuch z imieniem lub cały obiekt do wstawienia - ta funkcja niech tylko wstawia do drzewa - o imię i klucz niech się spyta funkcja main - lub funkcja wypełniająca drzewo wieloma wierzchołkami (pyta się lub losuje) co robi: znajduje odpowiednie miejsce do wstawienia - prawie jak przy wyszukiwaniu - ale gdy dojdziemy do NULL, to nie wychodzimy, tylko wstawiamy nowy wierzchołek - jeśli znajdziemy wierzchołek o tej samej wartości, traktujemy go jak większy od wstawianego pamięta wskaźnik do rodzica aktualnego wierzchołka - gdy już znajdziemy miejsce (aktualny wierzchołek będzie wskazywał na NULL), to musimy wiedzieć, w którym miejscu drzewa się znajdujemy dołącza nowy wierzchołek w miejsce lewego potomka rodzica (gdy rodzic nie ma lewego) lub prawego gdy rodzic nie ma prawego potomka
zadanie 1. drzewo binarne - 4 Wstawianie wierzchołka przedstawia rysunek: rysunek: R. Lafore. Poznaj Struktury danych i algorytmy C++ w 24 godziny
zadanie 1. drzewo binarne - 5 W klasie Drzewo zaimplementuj funkcję dokonującą obchodu drzewa czyli odwiedzającą (i wyświetlającą) wszystkie wierzchołki: niech funkcja dokona obchodu zwykłego we wzrastającym porządku co ma robić: wywołać się w celu obejścia swojego lewego poddrzewa odwiedzić (wyświetlić) siebie wywołać się w celu obejścia swojego prawego poddrzewa Kolejne elementy drzewa będą wtedy wyświetlane po kolei
zadanie 1. drzewo binarne 5 - dodatkowe Kolejne elementy drzewa mogą być wyświetlane po kolei Albo mogą być wyświetlane podobnie jak w drzewie genealogicznym - przykładowe drzewo wyświetlane przez program mogłoby wyglądać tak: 27 (Leoś) 13 (Lulu) --- 26 (Wacław) 33 (Zdzisław) 63 (Piotrek) 80 (Teosia) 51 (Ola) 70 (Tomek) 92 (Edek) 58 (Czesław) --- --- 82 (Dizel5) --- 57 (Lara) 60 (Klara)
zadanie 1. drzewo binarne - 6 W klasie Drzewo zaimplementuj funkcje znajdujące element o minimalnej / maksymalnej wartości klucza: chwila zastanowienia i okazuje się, że obie te funkcje są bardzo łatwe
zadanie 1. drzewo binarne 7 dodatkowe W klasie Drzewo zaimplementuj funkcję usuwającą element o zadanym kluczu: najpierw trzeba znaleźć element do usunięcia wierzchołek bez potomków wystarczy usunąć wierzchołek o jednym potomku przyłączyć potomka do rodzica usuwanego wierzchołka wierzchołek o dwóch potomkach w jego prawym poddrzewie trzeba znaleźć wierzchołek o najmniejszej wartości klucza lub w jego lewym poddrzewie wierzchołek o największej wartości klucza trzeba go usunąć ale zanim się usunie, to jego obiekt trzeba przepisać do usuwanego wierzchołka ładnie jest to wyjaśnione tu: http://edu.pjwstk.edu.pl/wyklady/asd/scb/asd07/main07_p5.html