Wie erstellt man eine hierarchische Baumstruktur aus einer Liste von Pfadzeichenfolgen?

Barbara Streisand
Freigeben: 2024-10-31 00:15:29
Original
909 Leute haben es durchsucht

How to Build a Hierarchical Tree Structure from a List of Path Strings?

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"
}
Nach dem Login kopieren

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": []
    }
  ]
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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"
    }]
}]
Nach dem Login kopieren

Unsere Lösung unterscheidet sich vom ursprünglichen Ansatz in den folgenden Hauptaspekten:

  • Es arbeitet mit einer Liste von Knoten und nicht mit den untergeordneten Knoten eines einzelnen Knotens.
  • Es erstellt neue Knoten, anstatt vorhandene wiederzuverwenden, wodurch Duplikate verhindert werden.
  • Es prüft, ob im Baum vorhandene Knoten vorhanden sind. Stellen Sie sicher, dass jeder Knoten nur einmal hinzugefügt wird.

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage