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
Libérer: 2024-12-16 10:32:11
original
571 Les gens l'ont consulté

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)
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal