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