Exercice Go Tour n°7 : Equivalence des arbres binaires
L'exercice Go Tour "Arbres binaires" vous met au défi de déterminer si deux arbres binaires contiennent les mêmes valeurs. L'exercice se concentre sur l'écriture d'une fonction Walk récursive qui parcourt les arbres et envoie leurs valeurs à un canal.
Dans le code que vous avez fourni, vous rencontrez un problème pour déterminer quand les arbres ont été entièrement parcourus. Bien que la fermeture du canal puisse sembler intuitive, cela mettrait fin prématurément au parcours en raison de la nature récursive de la fonction Walk.
Une solution à ce problème consiste à utiliser des fermetures. En tirant parti d'une version basée sur la fermeture de la fonction Walk, vous pouvez différer la fermeture du canal jusqu'à ce que toutes les valeurs aient été envoyées. Le code modifié ci-dessous démontre cette technique :
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) }
Avec cette modification, la fonction Walk ferme automatiquement le canal une fois que toutes les valeurs ont été envoyées, signalant la fin du parcours. Cela permet à la fonction Same de comparer efficacement les valeurs des deux arbres en les recevant des canaux et en s'assurant qu'elles sont identiques.
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!