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