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 중국어 웹사이트의 기타 관련 기사를 참조하세요!