Go ツアーのバイナリ ツリー演習の同じ関数は、2 つのバイナリ ツリーが 2 つのバイナリ ツリーであるかどうかを比較します。木は同じ値を持ちます。課題は、両方のツリーが同等であると宣言するために、いつ完全に走査されるかを判断することにあります。
元の実装では、チャネルを使用して値を比較しようとします。ただし、チャネルがいつ空になるかを判断するという問題に直面しています。
別のアプローチでは、高階関数とクロージャを使用して、ツリーの終わりの状態を適切に通知します。強化された Walk 関数は、クロージャを利用して Walk 関数を初期化します。クロージャにより、関数の戻り時にチャネルが確実に閉じられるようになり、再帰による早期のチャネル クロージャが防止されます。
修正された Walk 関数は次のとおりです:
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 中国語 Web サイトの他の関連記事を参照してください。