Dostęp do korzenia w drzewie

0

Witam, jako zadanie mam napisać drzewo, niby proste, ale zatrzymałem się nad jednym problemem. Problemem jest dostęp do korzenia, nie wiem jak się do niego odwołać

Drzewo za pomocą klasy, kod poniżej:

class AvlTree {
public:
    AvlTree();
    bool Find(int pValue);
    void Insert(int pValue);
    void Remove(int pValue);

    void Print(Node* pRoot);
}; 

Nie mogę zmieniać w żaden sposób deklaracji tej klasy/metod, nic dopisywać itd.
Nie wiem jak mogę dostać się do korzenia drzewa, tzn przykładowo do funkcji wstawiania, czy też szukania potrzebuję dostęp do niego, ale niezbyt wiem jak to zrobić. Jedyne co wymyśliłem to w konstruktorze dać że jakaś zmienna globalna jest korzeniem, ale czy to jest najlepsza metoda?

2

Jedyne co wymyśliłem to w konstruktorze dać że jakaś zmienna globalna jest korzeniem, ale czy to jest najlepsza metoda?

No, a potem utworzysz drugą instancję AvlTree, która będzie de facto tą samą, bo będą się odnosiły do jednej zmiennej globalnej.

Tak nie można, musiałbyś poprawić tę klasę.

2

Ale to nie jest tak, że nie możesz zmieniać publicznych, ale możesz dopisywać prywatne pola i metody?

Inna sprawa to coś tu jest nie tak. Bo jeżeli dodajesz tylko wartości, to nie masz wskaźników do żadnych Node z zewnątrz klasy, więc nie wiem skąd miałbyś wziąć ten pRoot dla metody Print

0

nie mogę wnosić żadnych poprawek do klasy - deklaracja drzewa (klasy) oraz Node(tu na szczęście jest klasycznie) jest w pliku nagłówkowym z góry narzuconym przez ćwiczeniowca.

Inna sprawa to coś tu jest nie tak. Bo jeżeli dodajesz tylko wartości, to nie masz wskaźników do żadnych Node z zewnątrz klasy, więc nie wiem skąd miałbyś wziąć ten pRoot dla metody Print

mialbym wskaźnik do Node do korzenia - tej globalnej zmiennej o której myślałem

No, a potem utworzysz drugą instancję AvlTree, która będzie de facto tą samą, bo będą się odnosiły do jednej zmiennej globalnej.

to mogę dać globalną tablicę dynamiczna czy coś w tym guście, gdzie w konstruktorze będę dodawał nowe korzenie. wiem że naciągane i nieeleganckie, ale w przypadku gdy nie dostaniemy jednak potwierdzenia, że plik nagłówkowy zawiera błędy i jednak można go poprawić to trzeba mieć jakiś plan awaryjny nad którym teraz się głowie

1

To nie zmieniaj nic w tej klasie - wydziedzicz z niej swoją. Z tego co dostałeś nic normalnego zrobić się nie da.

PS. Nie będę rozmawiał na temat zmiennych globalnych, bo jestem pod tym względem rasistą i nie uznaję prawa ich bytu

0

jak to kiedyś mi ktoś powiedział: zmienne globalne i goto to narzędzia zdesperowanych

ale racja, Twój pomysł jest lepszy

dzięki za pomoc :]

1 użytkowników online, w tym zalogowanych: 0, gości: 1