Maison >développement back-end >Golang >Comment les Goroutines et les canaux peuvent-ils comparer efficacement les valeurs de deux arbres binaires en Go ?

Comment les Goroutines et les canaux peuvent-ils comparer efficacement les valeurs de deux arbres binaires en Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-15 18:10:18999parcourir

How Can Goroutines and Channels Efficiently Compare the Values of Two Binary Trees in Go?

Arbres binaires équivalents dans Go Tour

Cet exercice consiste à déterminer si deux arbres binaires contiennent les mêmes valeurs. Dans votre implémentation, vous utilisez à juste titre des goroutines pour parcourir simultanément les deux arbres et envoyer leurs valeurs aux canaux. Cependant, le problème se pose lorsque l'on essaie de signaler qu'il n'y a plus d'éléments dans les arbres.

Éviter la fermeture prématurée

Utiliser close(ch) sur Walk entraînerait prématurément fermez les canaux avant que toutes les valeurs ne soient envoyées, car la récursivité se terminerait plus tôt. Au lieu de cela, une solution élégante consiste à utiliser une fermeture :

func Walk(t *tree.Tree, ch chan int) {
    defer close(ch) // 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)
}

Cette fermeture capture le canal ch et garantit qu'il n'est fermé que lorsqu'il n'y a plus de nœuds à traverser. L'instruction defer close garantit que la fermeture s'exécute une fois tous les appels récursifs terminés.

Avec ce correctif, votre fonction Same peut déterminer avec précision l'équivalence en recevant de manière itérative les valeurs des canaux et en les comparant.

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