> 백엔드 개발 > Golang > Go에서 이진 트리 동등성을 어떻게 정확하게 결정할 수 있습니까?

Go에서 이진 트리 동등성을 어떻게 정확하게 결정할 수 있습니까?

DDD
풀어 주다: 2024-12-09 16:51:11
원래의
556명이 탐색했습니다.

How Can We Accurately Determine Binary Tree Equivalence in Go?

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

Go의 이진 트리

Go Tour의 이진 트리 연습의 동일한 기능은 두 개의 이진 트리가 있는지 비교합니다. 트리는 동일한 값을 갖습니다. 문제는 두 트리가 완전히 순회하여 동등하다고 선언하는 시점을 결정하는 것입니다.

해결책

원래 구현에서는 채널을 사용하여 값을 비교하려고 시도합니다. 그러나 채널이 언제 비어 있는지 판단하는 문제에 직면합니다.

대체 접근 방식은 고차 함수와 클로저를 사용하여 트리 끝 조건을 우아하게 신호합니다. 향상된 걷기 기능은 클로저를 활용하여 걷기 기능을 초기화합니다. 폐쇄는 함수 반환 시 채널이 닫히도록 보장하여 재귀로 인한 조기 채널 폐쇄를 방지합니다.

수정된 걷기 기능은 다음과 같습니다.

func Walk(t *tree.Tree, ch chan int) {
    defer close(ch) // Closes the channel when the 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)
}
로그인 후 복사

이 수정된 접근 방식은 채널이 닫히도록 보장합니다. 모든 값이 전송된 후에만 Same이 트리의 동등성을 정확하게 비교할 수 있습니다.

위 내용은 Go에서 이진 트리 동등성을 어떻게 정확하게 결정할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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