Maison >développement back-end >Golang >Comment pouvons-nous tester efficacement l'équivalence des arbres binaires dans Go ?
Tests d'équivalence Go pour les arbres binaires
Les tests d'équivalence d'arbre binaire, comme le montre l'exercice Go Tour n°7, posent un défi pour déterminer l'équivalence de deux arbres contenant les mêmes valeurs. On peut tenter d'y parvenir en parcourant simultanément les deux arbres et en envoyant leurs valeurs aux canaux. Cependant, assurer la fin du parcours et la signalisation de l'absence d'éléments restants s'avère être un obstacle crucial.
Le code fourni tente de gérer cette tâche en envoyant des valeurs des arbres aux canaux et en les consommant simultanément. dans la même fonction. Cependant, utiliser close(ch) dans la fonction Walk est problématique car cela met fin prématurément au canal, empêchant l'envoi de toutes les valeurs.
Heureusement, une solution élégante a émergé du groupe golang-nuts qui exploite les fermetures pour résoudre ce problème :
func Walk(t *tree.Tree, ch chan int) { defer close(ch) // Closes the channel upon function return var walk func(t *tree.Tree) walk = func(t *tree.Tree) { if t == nil { return } walk(t.Left) ch <- t.Value walk(t.Right) } walk(t) }
Le code révisé utilise une fermeture pour implémenter la traversée de l'arbre. L'instruction defer garantit que le canal est fermé une fois le parcours terminé. Ce mécanisme gère gracieusement la signalisation de l'absence d'éléments restants, garantissant un contrôle précis de l'équivalence.
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!