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