Maison >développement back-end >Golang >Comment pouvons-nous tester efficacement l'équivalence des arbres binaires dans Go ?

Comment pouvons-nous tester efficacement l'équivalence des arbres binaires dans Go ?

DDD
DDDoriginal
2024-12-17 22:16:12301parcourir

How Can We Efficiently Test for Binary Tree Equivalence in 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!

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