Heim  >  Artikel  >  Backend-Entwicklung  >  Wie erstellt man eine hierarchische Baumstruktur aus einer Liste von Pfadzeichenfolgen?

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

Barbara Streisand
Barbara StreisandOriginal
2024-10-31 00:15:29905Durchsuche

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"
}

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:

  • 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!

Stellungnahme:
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