La même fonction dans l'exercice des arbres binaires de Go Tour compare si deux arbres binaires les arbres ont les mêmes valeurs. Le défi consiste à déterminer quand les deux arbres sont entièrement parcourus pour les déclarer équivalents.
L'implémentation d'origine tente d'utiliser un canal pour comparer les valeurs. Cependant, il est confronté au problème de déterminer quand les canaux sont vides.
Une approche alternative utilise une fonction d'ordre supérieur et des fermetures pour signaler gracieusement les conditions de fin d'arbre. La fonction Walk améliorée exploite une fermeture pour initialiser une fonction Walk. La fermeture garantit que le canal est fermé au retour de la fonction, empêchant ainsi la fermeture prématurée du canal due à la récursion.
Voici la fonction Walk corrigée :
func Walk(t *tree.Tree, ch chan int) { defer close(ch) // Closes the channel when the 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 approche révisée garantit que le canal est fermé seulement après que toutes les valeurs ont été envoyées, permettant à Same de comparer avec précision les arbres pour 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!