> 백엔드 개발 > Golang > Go 이진 트리 동등성 연습에서 순회 종료를 어떻게 적절하게 알릴 수 있습니까?

Go 이진 트리 동등성 연습에서 순회 종료를 어떻게 적절하게 알릴 수 있습니까?

Barbara Streisand
풀어 주다: 2024-12-10 16:49:17
원래의
600명이 탐색했습니다.

How Can I Properly Signal the End of Traversal in a Go Binary Tree Equivalence Exercise?

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

Go 투어에서 이진 트리 동등성 연습을 시도할 때 다음과 같은 문제가 발생할 수 있습니다. 트리에 더 이상 요소가 남아 있지 않을 때 신호를 보내는 데 어려움을 겪습니다. 주어진 코드는 채널을 사용하여 트리의 값을 전달하려고 시도하지만 이 신호 문제를 해결하지 못합니다.

문제

재귀 순회 중 채널 닫기 값 전송을 조기에 종료합니다. Walk() 함수 내에서 close(ch)를 사용하면 모든 값이 전송되기 전에 채널이 닫힙니다.

클로저를 사용한 솔루션

클로저를 사용하면 익명을 만들 수 있습니다. 주변 범위에서 변수를 캡처하는 함수입니다. 이는 실행이 완료되면 자동으로 채널을 닫는 사용자 정의 걷기 함수를 생성하는 데 사용할 수 있습니다.

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() 함수는 트리 순회를 처리하는 걷기 클로저를 반환합니다. . 클로저가 종료되면 자동으로 채널을 닫아 더 이상 전송할 값이 없음을 나타냅니다. 이렇게 하면 수신 측에서 순회가 완료되는 시점을 확인할 수 있습니다.

위 내용은 Go 이진 트리 동등성 연습에서 순회 종료를 어떻게 적절하게 알릴 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿