Maison >développement back-end >Golang >Comment les Goroutines et les canaux peuvent-ils comparer efficacement les valeurs de deux arbres binaires en 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!