>백엔드 개발 >Golang >Go에서 이진 트리 동등성을 효율적으로 테스트할 수 있는 방법은 무엇입니까?

Go에서 이진 트리 동등성을 효율적으로 테스트할 수 있는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-17 22:16:12299검색

How Can We Efficiently Test for Binary Tree Equivalence in Go?

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

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