Drzewo z trzema potomkami (Każdy węzeł ma do 3 synów)

0

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.

Rysunek1.jpg

0

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.

0

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.

0

Czyli masz zadany rysunek/schemat i chcesz zapisać do pliku w dowolnym formacie tak aby móc potem to odczytać, dobrze rozumiem?

0

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.

1
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
0

Dzięki! Jak na razie śmiga:)

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