>백엔드 개발 >Golang >Go에서 이진 트리를 효율적으로 비교하는 방법: Go 둘러보기 연습 #7 해결?

Go에서 이진 트리를 효율적으로 비교하는 방법: Go 둘러보기 연습 #7 해결?

Susan Sarandon
Susan Sarandon원래의
2024-12-16 10:32:11578검색

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

Go Tour 연습 #7: 이진 트리 동등성

Go Tour 연습 "Binary Trees"에서는 두 이진 트리에 다음이 포함되어 있는지 확인해야 합니다. 동일한 값. 이 연습에서는 나무를 순회하고 그 값을 채널로 보내는 재귀적 Walk 함수를 작성하는 데 중점을 둡니다.

제공한 코드에서 나무가 완전히 순회된 시기를 결정하는 문제에 직면합니다. 채널을 닫는 것이 직관적으로 보일 수 있지만 Walk 기능의 재귀적 특성으로 인해 순회가 조기에 종료될 수 있습니다.

이 문제에 대한 한 가지 해결책은 클로저를 활용하는 것입니다. Walk 기능의 폐쇄 기반 버전을 활용하면 모든 값이 전송될 때까지 채널 폐쇄를 연기할 수 있습니다. 아래 수정된 코드는 이 기술을 보여줍니다.

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)
}

이 수정을 통해 Walk 함수는 모든 값이 전송되면 자동으로 채널을 닫고 순회 완료를 알립니다. 이를 통해 Same 함수는 채널에서 값을 수신하고 동일한지 확인함으로써 두 트리의 값을 효과적으로 비교할 수 있습니다.

위 내용은 Go에서 이진 트리를 효율적으로 비교하는 방법: Go 둘러보기 연습 #7 해결?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.