Heim  >  Artikel  >  Backend-Entwicklung  >  Wie können Sie eine Liste von Pfadzeichenfolgen effizient in eine hierarchische Baumstruktur umwandeln, ohne stark auf Zeigermanipulation und Rekursion angewiesen zu sein?

Wie können Sie eine Liste von Pfadzeichenfolgen effizient in eine hierarchische Baumstruktur umwandeln, ohne stark auf Zeigermanipulation und Rekursion angewiesen zu sein?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-27 05:06:02282Durchsuche

How can you efficiently transform a list of path strings into a hierarchical tree structure without relying heavily on pointer manipulation and recursion?

Pfadzeichenfolgen in hierarchische Baumstrukturen umwandeln

Wenn ein Array von pfadähnlichen Strukturen präsentiert wird, kann eine entsprechende hierarchische Baumstruktur erstellt werden eine herausfordernde Aufgabe, insbesondere angesichts der Einschränkungen bei der Zeigermanipulation und Rekursion. Um dieses Problem anzugehen, besteht eine effiziente Lösung darin, eine Methode zu verwenden, die dem Baum iterativ Knoten hinzufügt, während nach vorhandenen Knoten gesucht wird.

LÖSUNG

Die vorgeschlagene Lösung verwendet eine Rekursion Funktion namens AddToTree, die eine Liste von Knoten (Stamm) und eine Liste von hinzuzufügenden Pfadkomponenten (Namen) entgegennimmt. Es durchläuft die Wurzelknoten und prüft, ob die erste Namenskomponente (names[0]) bereits als untergeordnetes Element vorhanden ist. Ist dies nicht der Fall, wird ein neuer Knoten mit Namen[0] als Name an die Wurzel angehängt.

Als nächstes ruft die Funktion AddToTree rekursiv für die untergeordneten Knoten des Knotens auf, der mit Namen[0] übereinstimmt. Dieser Prozess wird fortgesetzt, bis alle Komponenten von Namen verarbeitet wurden, was zu einer vollständig aufgebauten Baumstruktur führt.

CODE-BEISPIEL

Unten ist die Go-Implementierung der AddToTree-Funktion:

<code class="go">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
}</code>

BEISPIELAUSGABE

Mit dieser Lösung können die bereitgestellten Eingabedaten in die gewünschte Baumstruktur transformiert werden:

[{
    "name": "a",
    "children": [{
        "name": "b",
        "children": [{
            "name": "c"
        }, {
            "name": "g"
        }]
    }, {
        "name": "d"
    }]
}]

WICHTIGSTE UNTERSCHIEDE

Im Vergleich zum bereitgestellten Code bietet die vorgeschlagene Lösung mehrere entscheidende Vorteile:

  • Sie arbeitet auf einer Liste von Knoten und ermöglicht so mehrere Stammknoten.
  • Es erstellt neue Knoten, anstatt den Eingabeknoten zu ändern, und vermeidet Datenduplizierung.
  • Es durchsucht aktiv den Baum, um doppelte Knoten zu verhindern.

Das obige ist der detaillierte Inhalt vonWie können Sie eine Liste von Pfadzeichenfolgen effizient in eine hierarchische Baumstruktur umwandeln, ohne stark auf Zeigermanipulation und Rekursion angewiesen zu sein?. 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