Tworzenie struktury drzewiastej ze Stringa

0

Hej, mam taki oto problem, mianowicie dostając na wejście String w postaci np:

A1[A2[B1;B2]A3[B3]] chciałbym z niego zbudować strukturę drzewiastą, która powinna wyglądać następująco:

A1__
|__A2
| |__B1
| |__B2
|
|__A3
|
|__B3

Pytanie, jak najprościej to osiągnąć?? Jestem nowy w Javie więc będę bardzo wdzięczny za wszelkie wskazówki, z góry dzięki i pozdrawiam.

0

Można to zrobić opierając się na wyodrębnieniu charakterystycznych tokenów (i tak to się zwykle robi w parserach). U ciebie to są trzy znaki: [, ], : . Są one jednocześnie instrukcjami. Pomiędzy tymi znakami masz nazwy węzłów. Dla lepszego zobrazowania: dzielisz sobie string na tablicę zawierającą nazwy i instrukcje:
{"A1", "[", "A2", "[", "B1", ";", "B2", "]", "A3", "[", "B3", "]", "]"}
Teraz tworzysz sobie drzewo, którego węzeł ma wszelkie instrukcje pozwalające przejść do innych węzłów: rodzica i listy dzieci. Jeden węzeł drzewa masz zawsze wyróżniony, to jest ten, na którym aktualnie jest ustawiony program. Na starcie ustawiasz się w węźle ponad wszystkimi ( w XML DOM to jest Document, ponad węzłem ROOT).
Instrukcje masz następujące:
[ - dodaj do aktualnego węzeł z nazwą nowy węzeł podrzędny i przejdź do niego;
; - przejdź do rodzica aktualnego, dodaj nowy węzeł podrzędny i przejdź do niego;
] - przejdź do rodzica.
Jako nazwę bierzesz napis z tablicy, który jest przed instrukcją. Po dodaniu nowego węzła zawsze jest to aktualny węzeł roboczy.

Dzielenie na tablicę jest tylko dla zobrazowania, w rzeczywistości powinieneś czytać string znak po znaku i jeżeli znak nie jest instrukcją, to dopisywać go do nazwy trzymanej w buforze, a po wykonaniu instrukcji czyścić bufor. Ma to takie znaczenie, że wtedy przechodzisz string tylko raz od początku, bez cofania. Dzieląc wstępnie na tablicę masz dodatkowe przejście, ale za to jest przejżyście.
Mam nadzieję, że w miarę jasno to napisałem, jak coś, to pytaj.

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