Witam, chcę zbudować drzewo pomocy. W zależności od udzielanych odpowiedzi po kolei "ankietowany" będzie poruszał się w dół drzewa po odpowiedniej drodze aż do liścia zawierającego podsumowanie/odpowiedź.
W załączniku przykładowa struktura drzewa.
Chciałbym aby moje drzewko wczytywało do siebie dane z plików ponumerowanych od 0 do n (n - ostatni liść drzewa). Wiem jak dodawać elementy po kolei do drzewa, które ma w węźle 2 synów lecz nie potrafię zrobić dla trzech. Drzewo nie będzie pełne (nie każdy rodzić będzie miał zawsze trzech synów), dlatego stawiam na wskaźniki na synów. Brakuje mi tylko jakiegoś logicznego dodawania:/
Byłbym wdzięczy za jakąkolwiek pomoc.
Może podałbyś jak wyglądają pliki dla podanego drzewa?
Czyli jak podasz treści plików i odpowiadające tym plikom drzewko to może ktoś będzie miał jakiś pomysł, a tak to musisz czekać na jasnowidza.
Właśnie w tym problem, że nie wiem jak to rozwiązać. Myślę, że w pliku powinna być informacja ile potomków ma węzeł i nazwy plików, w których znajdują się dane potomków.
Czyli masz zadany rysunek/schemat i chcesz zapisać do pliku w dowolnym formacie tak aby móc potem to odczytać, dobrze rozumiem?
Chcę mieć coś takiego, że przygotuję sobie pliki i z tych plików będzie budować drzewko. Wymaganiem jest, żeby program był w miarę uniwersalny. ma działać tak, że mam pliki w podanym formacie (dowolnym)
i na ich podstawię buduję drzewo, w którym rodzić ma maksymalnie 3 dzieci(ale nie musi), w sensie drzewo nie musi być pełne. Potrzebuję jakiegoś psełdokodu lub chociaż podpowiedzi jak zrobić to wczytywanie i budowanie drzewa. Program jest obiektowy, więc drzewo to klasa. Poza tym mam kilka typów drzew, każde ma metodę PokażOkienko, różnią się tylko typem okienka jakie wyświetlają (pytanie z samymy radiobuttonami, z check boxami i okienko końcowe - podsumowanie), w sensie wszystkie te typy dziedziczą z jednej klasy drzewo, która ma wirtualną metodę pokazOkienko i 3 wskaźniki na dzieci. Da się to w ogóle jakoś rozwiązać? samo wczytywanie oczywiście. Byłbym bardzo wdzięczny.
Po prostu nie wiem jak zrobić, żeby po zbudowaniu korzenia pójść "w dół" i uzupełniać wszystkie potrzebne liście. Myślałem nad jakąś rekurencją. W sensie buduję węzeł, później buduję wszystko w prawo, następnie wszystko po środku a później wszystko w lewo.
mniejewięcej tak:
buduj_drzewo{
dodaj_dane_do_wezła()
buduj_drzewo_w_prawo()
buduj_drzewo_prosto()
buduj_drzewo_w_lewo()
}
i np
buduj_drzewo_w_prawo{
dodaj_dane_do_wezła()
buduj_drzewo_w_prawo()
buduj_drzewo_prosto()
buduj_drzewo_w_lewo()
}
to załatwi sprawę? Teraz jak rozwiązać strukturę tych plików, w sensie co powinny zawierać, żeby można było określić ile dzieci ma węzeł, w jakich plikach są dane, warunek stopu rekurencji, jakiego typu jest drzewo. Pomijając oczywiście dane do pytań.
P.S. Rozwiązanie nieokienkowe też jest dobre, z konsoli na MFC jest bardzo łatwo przejść.
P.S. Nie ma możliwości zrobienia indeksowania tablicowego jak w kopcu? Prostej formuły na liczenie w którym elemencie tablicy znajduje się jakie dziecko? Takie rozwiązanie byłoby najszybsze tylko nie wiem, czy możliwe. Można założyć, że tam gdzie nie będzie potomka wskaźnik będzie null, imitując drzewo pełne.
procedure Zapisz_Wezel(Wezel)
if Wezel jest pusty then
zapisz bajt z wartością 0
else
zapisz bajt z wartością 1
zapisz dane wezla
Zapisz_Wezel(Węzeł.Lewy)
Zapisz_Wezel(Węzeł.Środkowy)
Zapisz_Wezel(Węzeł.Prawy)
end
end
procedure Zapisz_Drzewo
Zapisz_Wezel(Korzen)
end
function Wczytaj_Wezel
wczytaj bajt
if wczytany bajt jest 0 then
Zwróć pusty wskaźnik
else
Utwórz nowy węzeł
Wczytaj dane węzła
Węzeł.Lewy=Wczytaj_Wezel
Węzeł.Środkowy=Wczytaj_Wezel
Węzeł.Prawy=Wczytaj_Wezel
Zwróć węzeł
end
end
procedure Wczytaj_Drzewo
Korzen=Wczytaj_Wezel
end
Dzięki! Jak na razie śmiga:)