Maison  >  Article  >  développement back-end  >  Comment puis-je convertir un tableau de chaînes de chemins en une structure arborescente ?

Comment puis-je convertir un tableau de chaînes de chemins en une structure arborescente ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-27 04:42:29346parcourir

How can I convert a path string array into a tree-like structure?

Transformation d'un tableau de chaînes de chemins en une structure arborescente

Introduction :

Construction d'une structure arborescente à partir de un tableau de chaînes de chemin peut être difficile, mais avec les techniques appropriées, cela peut être réalisé efficacement.

Solution :

La solution fournie utilise une fonction récursive, AddToTree , qui prend en entrée une liste de nœuds représentant l'état actuel de l'arborescence et les segments de chemin restants à ajouter. L'algorithme procède comme suit :

  1. Vérifiez si le segment du chemin actuel (premier élément du chemin) existe déjà en tant que nœud enfant de la racine actuelle.
  2. S'il n'est pas trouvé, créez un nouveau nœud avec le segment de chemin actuel comme nom et ajoutez-le en tant qu'enfant de la racine actuelle.
  3. Appelez récursivement AddToTree sur les segments de chemin restants, en utilisant le nœud enfant nouvellement créé comme nouvelle racine.

Extrait de code :

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

Avantages de la solution :

  • Réutilisabilité : La fonction peut être appliquée à plusieurs reprises pour ajouter plusieurs chaînes de chemin à l'arborescence.
  • Intégrité : Elle évite les nœuds en double dans l'arborescence en vérifiant les nœuds existants avant de les ajouter.
  • Efficacité : La récursion garantit que la fonction ne fonctionne que sur les nœuds nécessaires dans l'arborescence.

Exemple de sortie :

Le le code génère le résultat suivant :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn