Transformer les chaînes de chemin en structures arborescentes hiérarchiques
Lorsqu'on lui présente un tableau de structures de type chemin, la construction d'une structure arborescente hiérarchique correspondante peut être une tâche difficile, en particulier avec des limitations dans la manipulation et la récursivité du pointeur. Pour résoudre ce problème, une solution efficace consiste à utiliser une méthode qui ajoute de manière itérative des nœuds à l'arborescence tout en recherchant ceux qui existent.
SOLUTION
La solution proposée utilise une méthode récursive fonction nommée AddToTree qui prend une liste de nœuds (racine) et une liste de composants de chemin à ajouter (noms). Il parcourt les nœuds racine, vérifiant si le premier composant des noms (names[0]) existe déjà en tant qu'enfant. Si ce n'est pas le cas, un nouveau nœud avec noms[0] comme nom est ajouté à la racine.
Ensuite, la fonction appelle récursivement AddToTree sur les enfants du nœud qui correspond à noms[0]. Ce processus se poursuit jusqu'à ce que tous les composants des noms aient été traités, ce qui donne lieu à une structure arborescente entièrement construite.
EXEMPLE DE CODE
Vous trouverez ci-dessous l'implémentation Go de la fonction AddToTree :
<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>
EXEMPLE DE SORTIE
Grâce à cette solution, les données d'entrée fournies peuvent être transformées dans l'arborescence souhaitée :
[{ "name": "a", "children": [{ "name": "b", "children": [{ "name": "c" }, { "name": "g" }] }, { "name": "d" }] }]
DIFFÉRENCES CLÉS
Par rapport au code fourni, la solution proposée offre plusieurs avantages clés :
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!