Ich habe bspw. folgenden Menübaum in Form einer Adjazenzliste in einer Datenbank abgespeichert
Nun möchte ich gern diesen Baum so durchlaufen, dass ich auf der aktuellen Seite immer die Möglichkeit habe eine Seite zurück zu gehen und eine Seite vor zu gehen. (Bspw. Bin ich bei der ID=12 angelangt, kann ich zurück auf Seite mit ID=4 und vor zur Seite mit ID=13.
Nun habe ich folgende Überlegungen angestellt, um die Varianten durchzugehen. Allerdings hänge ich gedanklich gerade an Punkt 3 fest. Kann mir jemand einen Hinweis geben wie ich alle Fälle erschlage? Gibt es irgendwo schon fertige Implementierungen für solch ein Problem? Oder ist der Ansatz komplett falsch?
Code:
id | pid | level
1 | - | -
2 | 1 | 0
3 | 2 | 0
4 | 1 | 1
5 | 4 | 0
6 | 5 | 0
7 | 5 | 1
8 | 4 | 1
9 | 8 | 0
10 | 8 | 1
12 | 1 | 2
13 | 12 | 2
14 | 12 | 0
15 | 1 | 3
1
|-2
| |-3
|
|-4
| |-5
| | |-6
| | |-7
| |
| |-8
| |-9
| |-10
| |-11
|
|-12
| |-13
| |-14
|
|-15
Nun möchte ich gern diesen Baum so durchlaufen, dass ich auf der aktuellen Seite immer die Möglichkeit habe eine Seite zurück zu gehen und eine Seite vor zu gehen. (Bspw. Bin ich bei der ID=12 angelangt, kann ich zurück auf Seite mit ID=4 und vor zur Seite mit ID=13.
Nun habe ich folgende Überlegungen angestellt, um die Varianten durchzugehen. Allerdings hänge ich gedanklich gerade an Punkt 3 fest. Kann mir jemand einen Hinweis geben wie ich alle Fälle erschlage? Gibt es irgendwo schon fertige Implementierungen für solch ein Problem? Oder ist der Ansatz komplett falsch?
Code:
1. if (Kinder vorhanden) -->nimm das erste Kindelement
2. if (keine Kinder UND Geschwister nach mir) --> Nimm Geschwister
// hier ist gemeint, dass ich die Level+1 rechne
// Bsp. ID=9 mit Level 0 und nach mir kommt ID=10 mit Level 1
3. if(keine Kinder UND keine Geschwister) --> gehe eine Ebene hoch .. (und dann?)