Maison > développement back-end > Golang > 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
Libérer: 2024-10-29 02:00:02
original
401 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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"
    }]
}]
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal