Maison >développement back-end >Golang >Comment comparer efficacement les arbres binaires dans Go : résoudre l'exercice n°7 du Go Tour ?

Comment comparer efficacement les arbres binaires dans Go : résoudre l'exercice n°7 du Go Tour ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-16 10:32:11574parcourir

How to Efficiently Compare Binary Trees in Go: Solving the Go Tour Exercise #7?

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!

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