Heim > Artikel > Backend-Entwicklung > Wie erstellt man eine hierarchische Baumstruktur aus einer Liste von Pfadzeichenfolgen?
Eine Pfadstruktur in einen Baum umwandeln
Die Entwicklung einer verschachtelten Datenstruktur aus einer Sammlung von Pfadzeichenfolgen kann eine Herausforderung darstellen, insbesondere beim Umgang mit Zeiger und Rekursion. Lassen Sie uns eine Lösung zum Erstellen eines hierarchischen Baums aus einem Array von Pfadstrukturen untersuchen.
Betrachten Sie das folgende Beispiel:
s:=[]string { "a/b/c", "a/b/g", "a/d" }
Unser Ziel ist es, einen Baum zu erstellen, der der folgenden JSON-Struktur ähnelt:
{ "name": "a", "children": [ { "name": "b", "children": [ { "name": "c", "children": [] }, { "name": "g", "children": [] } ] }, { "name": "d", "children": [] } ] }
Um dies zu erreichen, implementieren wir eine rekursive Funktion namens AddToTree, die einen vorhandenen Baum und eine Liste von Pfadsegmenten verwendet.
func AddToTree(root []Node, names []string) []Node { if len(names) > 0 { var i int for i = 0; i < len(root); i++ { if root[i].Name == names[0] { //already in tree break } } if i == len(root) { root = append(root, Node{Name: names[0]}) } root[i].Children = AddToTree(root[i].Children, names[1:]) } return root }
Diese Funktion durchläuft den vorhandenen Baum, um festzustellen, ob Der angegebene Knoten existiert bereits. Wenn dies der Fall ist, wird mit dem nächsten Abschnitt des Pfads fortgefahren. Andernfalls wird ein neuer Knoten mit dem angegebenen Namen erstellt und an den vorhandenen Baum angehängt.
Example output (note that I used omitempty on the children field, because I don't like null entries in my JSONs): [{ "name": "a", "children": [{ "name": "b", "children": [{ "name": "c" }, { "name": "g" }] }, { "name": "d" }] }]
Unsere Lösung unterscheidet sich vom ursprünglichen Ansatz in den folgenden Hauptaspekten:
Das obige ist der detaillierte Inhalt vonWie erstellt man eine hierarchische Baumstruktur aus einer Liste von Pfadzeichenfolgen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!