Maison  >  Article  >  développement back-end  >  Comment pouvez-vous convertir efficacement une liste de chaînes de chemin en une structure arborescente ?

Comment pouvez-vous convertir efficacement une liste de chaînes de chemin en une structure arborescente ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-29 02:00:02309parcourir

How Can You Efficiently Convert a List of Path Strings into a Tree-like Structure?

Créer une structure arborescente à partir de chaînes de chemins

Convertir un tableau de chemins de chaînes en une structure arborescente peut être difficile, en particulier lorsqu'il s'agit de traiter avec des données récursives. Voici une solution efficace au problème :

Le tableau de chemin donné se compose de chaînes représentant le chemin vers les nœuds d'un arbre. Le résultat souhaité est une structure arborescente hiérarchique avec des nœuds et leurs enfants.

Tout d'abord, examinons le code fourni :

<code class="go">func appendChild(root Node, children []string) Node {
   if len(children) == 1 {
      return Node{children[0], nil}
   } else {
      t := root
      t.Name=children[0]
      t.Children = append(t.Children, appendChild(root, children[1:]))
      return t
   }
}</code>

Ce code tente de créer l'arbre de manière récursive, car il en contient problèmes :

  • Il suppose que le nœud d'entrée est toujours le nœud racine.
  • Il ne vérifie pas si un nœud existe déjà avant de créer un doublon.
  • Il met à jour le nœud d'entrée, entraînant une arborescence incorrecte.

Pour résoudre ces problèmes, voici un exemple de code révisé :

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

Ce code fonctionne sur une liste de nœuds, plutôt que les enfants d'un seul nœud. Il vérifie si un nœud existe déjà avant de l'insérer et crée de nouveaux nœuds au lieu de réutiliser le nœud d'entrée. De plus, il gère le cas où le chemin donné ne commence pas au même nœud racine en l'ajoutant à la liste des nœuds racine si nécessaire.

Exemple de sortie :

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

Ceci a été amélioré La solution fournit une conversion efficace et précise des chaînes de chemin vers une structure arborescente hiérarchique.

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