이진 트리에 대한 Go 동등성 테스트
Go Tour 연습 #7에서 볼 수 있듯이 이진 트리 동등성 테스트는 동일한 값을 포함하는 두 트리의 동등성. 두 트리를 동시에 탐색하고 해당 값을 채널에 전송하여 이를 달성하려고 시도할 수 있습니다. 그러나 순회 종료를 보장하고 나머지 요소가 없음을 알리는 것이 중요한 장애물임이 입증되었습니다.
제공된 코드는 트리에서 채널로 값을 전송하고 동시에 소비하여 이 작업을 처리하려고 시도합니다. 동일한 기능에서. 그러나 Walk 함수 내에서 close(ch)를 사용하면 채널이 조기에 종료되어 모든 값이 전송되지 않으므로 문제가 됩니다.
다행히도 클로저를 활용하여 문제를 해결하는 golang-nuts 그룹에서 멋진 솔루션이 나왔습니다. 이번 문제:
func Walk(t *tree.Tree, ch chan int) { defer close(ch) // Closes the channel upon function return 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) }
수정된 코드는 클로저를 활용하여 트리 순회를 구현합니다. defer 문은 순회가 완료되면 채널이 닫히도록 보장합니다. 이 메커니즘은 남은 요소가 없다는 신호를 적절하게 처리하여 정확한 동등성 검사를 보장합니다.
위 내용은 Go에서 이진 트리 동등성을 효율적으로 테스트할 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!