Maison >développement back-end >Golang >Comment puis-je signaler correctement la fin du parcours dans un exercice d'équivalence d'arbre binaire Go ?

Comment puis-je signaler correctement la fin du parcours dans un exercice d'équivalence d'arbre binaire Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-10 16:49:17579parcourir

How Can I Properly Signal the End of Traversal in a Go Binary Tree Equivalence Exercise?

Exercice n°7 du Go Tour : Équivalence des arbres binaires

Lorsque vous essayez l'exercice d'équivalence des arbres binaires dans le Go tour, vous pouvez rencontrer un défi de signaler lorsqu’il ne reste plus d’éléments dans les arbres. Le code donné tente d'utiliser un canal pour communiquer les valeurs des arbres, mais il ne parvient pas à résoudre ce problème de signalisation.

Le problème

Fermer un canal pendant une traversée récursive met fin prématurément à la transmission des valeurs. L'utilisation de close(ch) dans la fonction Walk() ferme le canal avant que toutes les valeurs ne soient envoyées.

Une solution utilisant la fermeture

Une fermeture vous permet de créer un nom anonyme. fonction qui capture les variables de la portée environnante. Cela peut être utilisé pour générer une fonction de marche personnalisée qui ferme automatiquement le canal une fois son exécution terminée.

func Walk(t *tree.Tree, ch chan int) {
    defer close(ch) // Automatically closes the channel when this function returns
    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)
}

Dans cette solution, la fonction Walk() renvoie une fermeture de marche qui gère le parcours de l'arborescence. . Lorsque la fermeture se termine, elle ferme automatiquement le canal, indiquant qu'il n'y a plus de valeurs à envoyer. Cela garantit que l'extrémité réceptrice peut déterminer quand le parcours est terminé.

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