Wypełnienie struktury typu Tree

0

Witam.

Mam bibliotekę, która tworzy drzewo, oto przykład użycia:

{
TreeNode node;

node.AddNode("A").AddNode("AA");
TreeNode node2=node.AddNode("B");
node2.AddNode("B1").AddNode("B11");
node2.AddNode("B2");
node2.AddNode("B3");
node.AddNode("C");
}

Ten kod generuje takie oto drzewko:

A
-AA
B
-B1
---B11
-B2
-B3
C

Mój problem polega na tym że ja dostaję dane w pętli i nie mogę zastosować
powyższego kodu.
Macie jakieś sugestie jak do tego należy podejść??
Męczę się z tym cały weekend i nic z tego nie wyszło.

Pozdrawiam.

0

stos zagnieżdżeń, na początku zawiera samo node.
Przed dodaniem sprawdza czy ten z góry stosu ma nazwę taką która jest częścią nazwy którą chcemy dodać.
Jeżeli nie to usuwamy element ze stosu i znowu sprawdzamy.
Po dodaniu dokładamy do stosu.

0

Nie naszkicowałem poprawnie mojego przykładu. Wszystkie widoczne węzły należą do jednego nadrzędnego, poniżej poprawny szkic:

O
-A
--AA
-B
--B1
----B11
--B2
--B3
-C

Biblioteka zawiera funkcję, która na podstawie indexu węzła zwraca jego referencję.

Poniżej wygląd pętli do której funkcja getData() wrzuca dane:

while (getData(strTmp, &extParam))
{
// kod realizujący budowę drzewa.
}

strTmp - to stringi z których buduję drzewo.
extParam - parametr, który mówi ile innych elementów zawiera w sobie dany węzeł, dla tego przykładu te parametry wynoszą:
O - 8 (wszystkie węzły)
A - 1 (AA)
AA - 0
B - 4 (B1, B11, B2, B3)
B1 - 1 (B11)
B11 - 0
B2 - 0
B3 - 0
C - 0

Nie mam pomysłu jak ogólnie napisać realizacje tego drzewa.

Pozdrawiam.

0

Dokładnie tak jak napisałem wyżej.

0

Niestety nie rozumiem Twojego wyjaśnienia.
Kombinuje coś z rekurencją ale dalej mi nie wychodzi.
Możesz naszkicować swoje rozwiązanie?

0

Przecież naszkicowałem, następnym razem pisz wprost którego słowa nie rozumiesz.

  1. tworzysz stos i dodajesz do niego obiekt O o nazwie pustej.
  2. pobierasz nazwę kolejnego węzła, jeżeli brak to koniec
  3. pobierasz długość nazwy obiektu na górze stosu LEN
  4. porównujesz nazwę obiektu na górze stosu z pierwszymi LEN znakami pobranej nazwy obiektu.
  5. jeżeli są różne to usuwasz obiektu na górze stosu oraz przechodzisz do punktu 3
  6. dodajesz nowy obiekt do drzewa jako podrzędny obiektu na górze stosu
  7. wstawiasz ten nowy obiekt na stos
  8. przechodzisz do punktu 2
0

Niestety nie mogę w algorytmie bazować na nazwach węzłów, ponieważ w skrajnym przypadku wszystkie mogą być takie same.

0

To na jakiej podstawie narysowałeś drzewko tak:

O
 -A
 --AA
 -B
 --B1
 ----B11
 --B2
 --B3
 -C

a nie np tak:
O
 -A
 --AA
 ---B
 ----B1
 -----B11
 ------B2
 -------B3
 --------C

Zastąp porównywanie nazw na inny rodzaj decyzji czy nowy węzeł ma być pod podanym w stosie węzłem czy nie.

0

Rysunek wygląda tak ponieważ razem z węzłem dostaję zmienną w której mam informację czy dany węzeł jest nadrzędny dla innych
węzłów czy też nie.

strTmp - węzeł
extParam - 0 => węzeł nie jest ndrzędny dla żadnego innego, >0 => jest nadrzędny

while (getData(strTmp, &extParam))
{
// kod realizujący budowę drzewa.
}

O
└-A
| └-AA
|-B
| └-B1
| | └-B11
| |-B2
| └-B3
└-C

Jeżeli dojdę do węzła B muszę mieć możliwość odczytania referencji wezła 'O' ponieważ do niego muszę dopisać 'B'.
Z kolej jeśli dojdę do węzła 'B2' muszę jakoś uzyskać referencję do 'B'.
Nie wiem jak te referencje uzyskać.
Z tym mam problem i nie potrafię tego zapisać.

0
roben napisał(a):

extParam - 0 => węzeł nie jest ndrzędny dla żadnego innego, >0 => jest nadrzędny
To nie jest wystarczająca informacja.

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